Sql 子串相等

Sql 子串相等,sql,sql-server,substring,equality,Sql,Sql Server,Substring,Equality,这是一个与Server2008有关的子字符串平等性的问题。在我的问题中,我有一个名为LICNO的列,它处理许可证号。这些许可证编号的格式如下: LPC-907 LCSW-517 我正在使用子字符串,如下所示: CASE WHEN SUBSTRING(LICNO,1,2) <> 'LA' THEN 'Architect' WHEN SUBSTRING(LICNO,1,4) = 'CAP' THEN 'Certified Public Assistant' WHEN SU

这是一个与Server2008有关的
子字符串
平等性的问题。在我的问题中,我有一个名为
LICNO
的列,它处理许可证号。这些许可证编号的格式如下:

LPC-907
LCSW-517
我正在使用
子字符串
,如下所示:

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,
案例
当子字符串(LICNO,1,2)'LA'然后是'Architect'
当子字符串(LICNO,1,4)=“CAP”时,则为“认证公共助理”
当子字符串(LICNO,1,2)为空时,则为“无”
“景观设计师”
以许可证类型结束,

存储过程只返回Architect和landscapearchitect。我是否正确使用了子字符串?

当前,如果LICNO不是以LA开头,则语句将返回Architect。所以,如果LICNO以CAP开头,它将返回Architect。你需要为你的陈述找到正确的顺序。将“LA”置于其他条件之后,置于ELSE之前。

我认为您可能对
子字符串
函数使用了错误的字符数。如果希望值等于CAP,那么我认为应该使用3作为长度。此外,替换案例陈述的顺序:

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
案例
当子字符串(LICNO,1,3)=“CAP”时,则为“认证公共助理”
当子字符串(LICNO,1,2)为空时,则为“无”
当子字符串(LICNO,1,2)'LA'然后是'Architect'
“景观设计师”
以许可证类型结束


(跟随@Melanie)

如果你总是从1开始,
LEFT()
更简洁直观。我们无法真正判断存储过程返回内容的质量,除非我们了解数据的外观以及您期望的结果。它也可能是
CPA
而不是
CAP
@AaronBertrand--是的,可能需要按照您的建议查看一些数据:)
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,