整个空日期它呃偿还

TSQL Null data to '' replace

我有以下查询:

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(CONVERT(varchar(10),pics.e_firedate,120),'') e_firedate
FROM et_pics

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

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

好吧,您数据库中的列似乎是 DATETIME 列。所以 SQL 服务器将 '' 转换为默认日期值。

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

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

尝试:

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

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

并且由于 DATETIME 的数据类型高于 VARCHAR,因此 '' 被转换为 DATETIME:

SELECT CAST('' AS DATETIME)

以上会return1900-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

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

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