我有以下查询:
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
,我试图投射和替换也没有成功。
我如何实现目标?
答案 0 :(得分:6)
这是因为在使用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。
答案 1 :(得分:3)
尝试:
select isNUll(CONVERT(VARCHAR, pics.e_firedate, 120), '') e_firedate
FROM et_pics
答案 2 :(得分:2)
SELECT
ISNULL(CONVERT(varchar(10),pics.e_firedate,120),'') e_firedate
FROM et_pics
答案 3 :(得分:2)
您必须转换/转换日期时间字段,而不是其他值 - 例如:
case
when pics.e_firedate is null
then ''
else cast(pics.e_firedate as nvarchar(30))
end
答案 4 :(得分:1)
好吧,数据库中的列似乎是DATETIME
列。因此SQL Server将''
转换为默认日期值。
一种解决方案可能是将 all 结果转换为字符串,如:
SELECT ISNULL(CONVERT(NVARCHAR, pics.e_firedate), '') AS e_firedateString
FROM et_pics
答案 5 :(得分:0)
可能效率更高?可能不会。
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