2014-02-25 5 views
0

이 내 쿼리입니다 : 나는 그것을 실행하면SQL with Len - 변환에 실패 했습니까?

SELECT at.AssetTag, 
dp.Custodian, 
CASE WHEN PATINDEX('%_%', dp.Custodian) = '0' 
THEN dp.Custodian 
ELSE RIGHT(LTRIM(RTRIM(dp.Custodian)),LEN(LTRIM(RTRIM(dp.Custodian)) - PATINDEX('%_%', dp.Custodian))) END AS FirstName, 
CASE WHEN PATINDEX('%_%', dp.Custodian) = '0' 
THEN '' 
ELSE LEFT(dp.Custodian, PATINDEX('%_%', dp.Custodian)-1) END AS LastName, RIGHT(at.Assettag,3) AS MediaTypeSuffix 
FROM tblAssetTracking at (NOLOCK) 
INNER JOIN tblDiscoveryProcessing dp (NOLOCK) ON dp.FKAsset = at.ID 
WHERE dp.Custodian Is Not Null 

내가 오류가 (xxx는 내가 대체했다 실제 값) "int 데이터 형식으로 NVARCHAR 값 'XXX'를 변환 할 때 변환에 실패했습니다." 아무도 도와 줄 수 있니? 추신. 그 진술이 코드 블록에 들어가기를 바란다. 필자는 코드를 올바르게 붙여 넣는 방법을 이해하지 못합니다.

감사합니다.

답변

0

Nevermind. 트리밍을 제거해야했습니다.

SELECT at.AssetTag, 
dp.Custodian, 
CASE WHEN PATINDEX('%[_]%', dp.Custodian) = '0' 
    THEN dp.Custodian 
    ELSE RIGHT(dp.Custodian,LEN(dp.Custodian) - PATINDEX('%[_]%', dp.Custodian)) 
END AS FirstName, 
CASE WHEN PATINDEX('%[_]%', dp.Custodian) = '0' 
    THEN '' 
    ELSE LEFT(dp.Custodian, PATINDEX('%[_]%', dp.Custodian)-1) 
END AS LastName, 
RIGHT(at.Assettag,3) AS MediaTypeSuffix 
FROM tblAssetTracking at (NOLOCK) 
INNER JOIN tblDiscoveryProcessing dp (NOLOCK) ON dp.FKAsset = at.ID 
WHERE dp.Custodian Is Not Null