【问题标题】:how to check empty field in sql如何检查sql中的空字段
【发布时间】:2013-04-04 13:53:44
【问题描述】:

我有一个 sql 查询,它在字段中显示地址 1,地址 2 为“地址 1,地址 2”。我的查询是

(S.Address1 + '  ,  ' + S.Address2)as Address1 

但是当 Address2 中的值为空白时,它会显示 '地址1,' 我只需要显示地址1。如何删除逗号

【问题讨论】:

    标签: sql sql-server sql-server-2008 tsql


    【解决方案1】:

    使用COALESCE

    (COALESCE(S.Address1,'') + '  ,  ' + COALESCE(S.Address2, '')) as Address1 
    

    但上面语句的问题是当address2为空时,它会有尾随,,修复

    (COALESCE(S.Address1,'')  + COALESCE(' , ' + S.Address2, '')) as Address1
    

    更新 1

    CASE WHEN S.Address2 = '' 
         THEN S.Address1
         ELSE S.Address1 + '  ,  ' + S.Address2
    END  AS Addrss
    

    【讨论】:

    • +1 表示 coalesce 而不是 isnull,因为 coalesce 是 sql 标准
    • 需要把逗号放在第二个COALESCE里面。
    • 由于需求的变化,现在我们也需要NULLIF叹息
    • @Anilkumar 你在你的问题中提到那些NULL 不是空白的。
    【解决方案2】:

    我认为 J W 很接近,但我相信您想要的实际公式是:

    S.Address1 + COALESCE('  ,  ' + NULLIF(S.Address2,''),'') as Address1
    

    (下面不相关,因为 OP 现在说列值是空白的,而不是 NULL

    但是您还有另一个问题 - 上述方法(还)不起作用,因为您显然将 CONCAT_NULL_YIELDS_NULL 设置为 OFF。这个需要开启(一般通过设置ANSI_NULLSON),since

    在 SQL Server 的未来版本中,CONCAT_NULL_YIELDS_NULL 将始终为ON,任何显式将该选项设置为 OFF 的应用程序都会产生错误。避免在新的开发工作中使用此功能,并计划修改当前使用此功能的应用程序。

    【讨论】:

    • 你能告诉我 COALESCE 和 ISNULL 之间的确切区别吗?
    • @Anilkumar - ISNULL 是 T-SQL 方言,仅限于两个输入,并强制结果的类型与其第一个输入的类型相同,无论是什么类型优先规则通常会说。 COALESCE 是标准 SQL,扩展到多个输入(返回第一个非 NULL 值)并执行正常类型优先级以确定结果类型。除了一些极端情况(这里不存在)之外,我总是选择COALESCE
    【解决方案3】:

    如果 address2 可以是 null 或空字符串,或者只是空格,您需要类似:

    select address1 + 
    case when length(trim(ifnull(address2, ''))) > 0 then ', ' + address2
    else '' end
    

    【讨论】:

      【解决方案4】:
      SELECT CONCAT(Address1                                      -- concatenation of address 1 with..
                 , CASE WHEN ISNULL(NULLIF(Address2, ''))         -- if address 22 is null or empty
                   THEN ''                                        -- concat with nothing
                   ELSE CONCAT( '  ,  ', Address2)                -- else concat with a comma and address 2
                   END
             )
      

      Sqlfiddle here

      CASE WHEN ISNULL(NULLIF(Address2, '')) 行用于确定 address2 是 null 还是空。 Details can be found here.

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-09-23
        • 1970-01-01
        • 1970-01-01
        • 2011-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多