【问题标题】:TSQL Null data to '' replaceTSQL空数据''替换
【发布时间】:2015-12-30 09:59:10
【问题描述】:

我有以下查询:

SELECT pics.e_firedate FROM et_pics

结果:

NULL
2014-12-01 00:00:00.000
2015-04-03 00:00:00.000
NULL
NULL

我想将 NULL 值替换为 ''。

CASE 
        WHEN pics.e_firedate IS NULL THEN ''
        ELSE pics.e_firedate
END

使NULL 转换为1900-01-01 00:00:00.000,我尝试将其转换和替换也没有成功。

我怎样才能实现我的目标?

【问题讨论】:

  • SELECT ISNULL(pics.e_firedate,'') FROM et_pics
  • 所有 case 表达式的返回类型必须相同。
  • 您希望结果列是 varchar 还是 datetime?为什么它需要是一个空字符串而不是 NULL?您的列是 DATETIME 而不是 varchar,因此零长度字符串将被转换为您看到的日期。
  • @tinka 这使语句更短,但结果相同。

标签: sql sql-server tsql sql-server-2005


【解决方案1】:

这是因为在使用CASE 表达式时,返回值必须具有相同的数据类型。如果它们具有不同的数据类型,则所有值都将转换为具有higher data type precedence 的类型。

由于DATETIME 具有比VARCHAR 更高的数据类型,'' 被转换为DATETIME

SELECT CAST('' AS DATETIME)

以上将返回1900-01-01 00:00:00.000

要达到您想要的结果,您应该将结果CAST 发送到VARCHAR

SELECT
    CASE 
        WHEN e_firedate IS NULL THEN ''
        ELSE CONVERT(VARCHAR(23), e_firedate, 121)
END
FROM et_pics

有关日期格式,请阅读this

【讨论】:

  • 非常感谢您的解释。
【解决方案2】:

试试:

 select isNUll(CONVERT(VARCHAR,  pics.e_firedate, 120), '') e_firedate
FROM et_pics

【讨论】:

    【解决方案3】:
    SELECT 
        ISNULL(CONVERT(varchar(10),pics.e_firedate,120),'') e_firedate
    FROM et_pics
    

    【讨论】:

      【解决方案4】:

      您必须转换/转换日期时间字段,而不是其他值 - 例如:

      case 
          when pics.e_firedate is null 
          then '' 
          else cast(pics.e_firedate as nvarchar(30))
      end
      

      【讨论】:

        【解决方案5】:

        嗯,您数据库中的列似乎是DATETIME 列。因此 SQL Server 将'' 转换为默认日期值。

        一种解决方案可能是将所有结果转换为字符串,如:

         SELECT ISNULL(CONVERT(NVARCHAR, pics.e_firedate), '') AS e_firedateString
         FROM et_pics
        

        【讨论】:

          【解决方案6】:

          可能更高效?也可能不会。

          SELECT CONVERT(VARCHAR(23), e_firedate, 121) FROM et_pics where pics.e_firedate is not null 
          union 
          SELECT ''                                    FROM et_pics where pics.e_firedate is     null 
          

          【讨论】:

            猜你喜欢
            • 2015-05-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-02-20
            • 2015-03-27
            • 1970-01-01
            • 1970-01-01
            • 2011-01-30
            相关资源
            最近更新 更多