【问题标题】:Substring equality子串相等
【发布时间】:2013-03-19 19:43:18
【问题描述】:

这是一个处理 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?

【问题讨论】:

  • 如果您总是从 1 开始,LEFT() 恕我直言更简洁直观。除非我们了解数据的样子以及您期望的结果,否则我们无法真正判断存储过程返回的质量。

标签: sql sql-server substring equality


【解决方案1】:

目前,如果 LICNO 不以 LA 开头,则该语句将返回 Architect。因此,如果 LICNO 以 CAP 开头,它将返回 Architect。您需要为您的报表找到正确的顺序。将 'LA' 放在其他条件之后和 ELSE 之前。

【讨论】:

    【解决方案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)

    【讨论】:

      【解决方案3】:

      我认为您可能为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

      【讨论】:

      • 也应该是CPA 而不是CAP
      • @AaronBertrand -- 是的,可能需要按照您的建议查看一些数据 :)
      猜你喜欢
      • 2011-12-09
      • 2021-02-13
      • 2010-10-10
      • 2015-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-22
      相关资源
      最近更新 更多