子串相等

时间:2013-03-19 19:43:18

标签: sql sql-server substring equality

这是一个涉及SUBSTRING与Server 2008相等的问题。在我的问题中,我有一个名为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,

存储过程仅返回Architect和Landscape Architect。我正确使用SUBSTRING吗?

3 个答案:

答案 0 :(得分:3)

目前,如果LICNO不以LA开头,则该声明将返回Architect。因此,如果LICNO以CAP开头,它将返回Architect。您需要为您的陈述找到正确的顺序。把&lt;&gt;在其他条件之后和ELSE之前'LA'。

答案 1 :(得分: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)

答案 2 :(得分: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