【问题标题】:How to do not null check on LEFT function on the select query如何不对选择查询的 LEFT 函数进行空检查
【发布时间】:2020-12-03 19:44:24
【问题描述】:

我有一个查询返回一些人口统计数据,如名字、姓氏、中间名,我需要在每个查询上使用 LEFT 函数来过滤每列的第一个字母,如 LEFt(firstName, 1)。当每列是不是空值。当为空值时

 select otherColumns, LEFT(sub.LastName, 1) + ',' + LEFT(sub.FirstName, 1) + ' ' + LEFT(sub.MiddleName, 1) as patientInitials from <table> <inner joins> <some where conditions>;

但是当 midName 等人口统计数据之一为 null 而其他 firstName、lastName 不为 null 时,patentInitials 正在评估为 NULL,不知道为什么?

我通过添加 COALESCE

解决了我的问题
 LEFT(sub.LastName, 1) + ',' + LEFT(sub.FirstName, 1) + ' ' + COALESCE((LEFT(sub.MiddleName, 1)),'') as patientInitials 

但是有没有其他好的方法来检查 LEFT 函数上的 notNull 呢??

帮助赞赏!

【问题讨论】:

    标签: sql sql-server tsql


    【解决方案1】:

    但是有没有其他好的方法来检查 LEFT 函数上的 notNull 呢??

    CONCAT 函数忽略 NULL:

    SELECT CONCAT(LEFT(sub.LastName, 1), ',' , 
                  LEFT(sub.FirstName, 1),
                  ' ' + LEFT(sub.MiddleName, 1)) patientInitials
    FROM tab;
    

    ' ' + LEFT(sub.MiddleName, 1)) 使用 ' ' 将删除前导空格,以防中间名是 NULL

    【讨论】:

    • 我宁愿说 CONCAT 函数会忽略 NULL。
    • @jarlh 谢谢,这是一个更好的措辞 :)
    • @LukaszSzozda 如果不想 CONCAT 并且只想使用一列 LEFT(firstName, 1) 并忽略 null 怎么办。在这种情况下你是否仍然建议使用 CONCAT
    【解决方案2】:

    CONCAT_WS函数也有类似的功能:CONCAT_WS (Transact-SQL)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-18
      • 1970-01-01
      • 2011-09-15
      • 1970-01-01
      • 2015-09-12
      • 1970-01-01
      • 2017-11-02
      相关资源
      最近更新 更多