2014-11-06 67 views
0

我有一個PRJ_NAME結果「Authoriazations - XXXXXX-XXXXXX」,但我要的是「授權」,所以我用這個查詢與取得圓滿成功。SQL SELECT有左,LEN

SELECT ISNULL(LEFT(PRJ_NAME, LEN(PRJ_NAME)-16),'') AS 'Folder Name' 
FROM MHGROUP.PROJECTS 
WHERE PRJ_ID = '3626747' 

現在,當我在基本連接中使用以下查詢時,我無法在此查詢中使用此邏輯。

SELECT m.[DOCNAME], 
     m.[SUBCLASS_ALIAS], 
     u.FULLNAME, 
     m.[CDATE3] as 'File Date', 
     m.[DECLAREWHEN] as 'Declared', 
     ISNULL(LEFT(p.PRJ_NAME, LEN(p.PRJ_NAME)-16),'') as 'Folder Name', 
     m.ENTRYWHEN 
FROM ([Imanage].[MHGROUP].[DOCMASTER] as m (nolock) 
JOIN [Imanage].[MHGROUP].[DOCUSERS] as u (nolock) on u.USERID = m.OPERATOR), 
     [Imanage].[MHGROUP].[PROJECTS] as p (nolock), 
     [Imanage].[MHGROUP].[PROJECT_ITEMS] as i (nolock) 
WHERE i.ITEMTYPE = 'D' and 
     i.ITEM_ID = m.DOCNUM and 
     i.PRJ_ID = p.PRJ_ID 
ORDER BY u.FULLNAME, p.PRJ_NAME 

我得到以下錯誤...

消息537,級別16,狀態2,行傳遞給 左或子字符串函數2無效長度參數。

我似乎無法想象可能會導致這種情況。任何援助或指導將不勝感激。

回答

3

PRJ_NAME列中的值小於16個字符。

下面簡單的查詢看到

select LEFT('abc', LEN('abc')-16) 

檢查是否有任何這樣的名稱,並case語句

case when len(PRJ_NAME) > 16 
    then LEFT(p.PRJ_NAME, LEN(p.PRJ_NAME)-16) 
    ELSE prj_name 
END 
+0

處理它爲什麼不先查詢失敗同樣的錯誤?此外,我認爲他根本不需要'len',只需'left(prt_name,14)'或者''left(prt_name,len('Authorizations'))' – Beth 2014-11-06 19:36:02

+0

@Beth,left(prt_name,len('如果prj_name小於16,即它根本不包含授權,一些錯誤的條目 – radar 2014-11-06 19:37:35

+0

沒錯,但他說他使用了他的第一個查詢「完全成功」。如果數據不好(短)會怎麼樣? – Beth 2014-11-06 19:40:01