2013-03-19 43 views
-1

這是一個問題,處理與服務器2008年SUBSTRING平等。在我的問題,我有一個名爲LICNO列處理許可證號碼。這些許可證編號格式爲如下:子串相等

LPC-907 
LCSW-517 

我使用SUBSTRING如下:

CASE 
    WHEN SUBSTRING(LICNO,1,2) <> 'LA' THEN 'Architect' 
    WHEN SUBSTRING(LICNO,1,4) = 'CAP' THEN 'Certified Public Assistant' 
    WHEN SUBSTRING(LICNO,1,2) IS NULL THEN 'None' 
    ELSE 'Landscape Architect' 
END AS LicenseType, 

存儲過程只返回建築師和景觀設計師。我是否正確使用SUBSTRING?

+0

如果你總是從1開始,'左()'更簡潔和直觀的恕我直言。我們無法真正判斷存儲過程返回的質量,除非我們理解數據的外觀和期望的結果。 – 2013-03-19 19:47:04

回答

3

當前,如果LICNO不以LA開頭,則該語句將返回Architect。因此,如果LICNO以CAP開始,它將返回Architect。您需要爲您的報表找到正確的順序。在其他條件之後並在ELSE之前,放置'012'''''。

0

我想你可能會使用不正確的字符數SUBSTRING函數。如果你想讓這個值等於CAP,那麼我認爲你應該使用3來表示長度。此外,更換你的CASE語句的順序:

CASE  
  WHEN SUBSTRING(LICNO,1,3) = 'CAP' THEN 'Certified Public Assistant' 
  WHEN SUBSTRING(LICNO,1,2) IS NULL  THEN 'None' 
  WHEN SUBSTRING(LICNO,1,2) <> 'LA' THEN 'Architect' 
  ELSE 'Landscape Architect' 
END AS LicenseType 

http://msdn.microsoft.com/en-us/library/ms187748.aspx

+0

也可能是'CPA'而不是'CAP'。 – 2013-03-19 19:53:54

+0

@AaronBertrand - 是的,可能需要看到你建議的一些數據:) – sgeddes 2013-03-19 19:55:10

2
CASE 
    WHEN SUBSTRING(LICNO,1,2) = 'LA' THEN 'Landscape Architect' 
    WHEN SUBSTRING(LICNO,1,3) = 'CAP' THEN 'Certified Public Assistant' 
    WHEN SUBSTRING(LICNO,1,2) IS NULL THEN 'None' 
    ELSE 'Architect' 
END AS LicenseType, 

(以下@Melanie)