【问题标题】:Issue with NULL value in nested case嵌套情况下的 NULL 值问题
【发布时间】:2016-06-22 22:48:46
【问题描述】:

长话短说,如果存储值为空,我需要返回一个 varchar 值,但要么给我一个 NULL 值,要么给我一个 varchar 值,这里是代码。

在表中我有一些字段为空,一些字段包含数据

CASE WHEN DS.DBIRTH+DS.MBIRTH+DS.YBIRTH = 
'' THEN CONVERT(VARCHAR(10),PT.CLIENTDBIRTHDATE,111)
ELSE 'INPUT DATE OF BIRTH'
CASE WHEN PT.CLIENTBIRTHDATE IS NULL THEN ''
 ELSE '1800-01-01'
 END 
 END AS BFIELD

这给我带来了类似的东西

         NULL
        1917/05/02
         NULL
        1923/02/02
        1967/01/05
        NULL

但我需要这样的东西

        01/01/1800
        1917/05/02
        01/01/1800
        1923/02/02
        1967/01/05
        01/01/1800

很抱歉这个菜鸟问题

【问题讨论】:

  • 案例没有正确嵌套(可能); MySQL 可能会尝试将内部大小写的结果连接到“INPUT DATE OF BIRTH”字符串的末尾。
  • 你可以使用 ifnull 像 IFNULL(PT.CLIENTDBIRTHDATE,'1800-01-01')

标签: mysql sql sql-server tsql


【解决方案1】:

您当前的case 语句看起来不对。我想你想要做的是将结果包装在coalesce

COALESCE(CASE 
             WHEN DS.DBIRTH+DS.MBIRTH+DS.YBIRTH = '' 
             THEN CONVERT(VARCHAR(10),PT.CLIENTDBIRTHDATE,111)
             ELSE 'INPUT DATE OF BIRTH'
         END, '01/01/1800') AS BFIELD

【讨论】:

    【解决方案2】:

    如果没有 Case 语句,它应该像......一样简单

    select CONVERT(VARCHAR(10) , 
                    CAST(ISNULL(DateColumn,'01/01/1800') AS DATE)
                    ,111)
    

    【讨论】:

      猜你喜欢
      • 2019-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-28
      • 1970-01-01
      • 2019-08-08
      • 1970-01-01
      • 2022-12-30
      相关资源
      最近更新 更多