我的select语句中有一列如下所示:
SELECT CASE WHEN fu.SentOutDate IS NULL THEN '' ELSE fu.SentOutDate END
这将返回1900-01-01 00:00:00.000
,否则将为NULL
我知道这一点,因为当我放入fu.SentOutDate
时,它会显示为NULL
为什么会发生这种情况,我怎样才能让它返回空值?
答案 0 :(得分:3)
尝试将日期转换为字符串,以便它不会尝试将''转换为日期:
(CASE WHEN fu.SentOutDate IS NULL THEN '' ELSE CONVERT(varchar,fu.SentOutDate) END)
答案 1 :(得分:2)
它会将您的''转换为DATETIME,因为您要返回的其他列是日期时间列。
SELECT CASE WHEN 1=1 THEN '' ELSE GETDATE() END
会给你相同的价值......
您可以将此转换为varchar(32),但我不确定其后果
SELECT CASE WHEN 1=1 THEN '' ELSE CAST(GETDATE() AS varchar(32)) END
答案 2 :(得分:1)
列只能返回一种数据类型 - DATETIME!= string / VARCHAR。
如果要在值为NULL时需要零长度字符串,则必须使用CAST/CONVERT显式更改数据类型,以将非NULL值更改为VARCHAR / etc数据类型。 / p>
答案 3 :(得分:1)
如果您只是检查NULL值,可以尝试ISNULL()并将日期转换为varchar。
SELECT ISNULL(CAST(fu.SentOutDate AS VARCHAR(50)),'')AS SendOutDate FROM tablename
答案 4 :(得分:0)
听起来你正在某个GUI或客户端显示这个值。在我看来,最佳做法是将其从那里的NULL值转换而不是在查询中。
如果您创建的数据库可以扩展到数百万用户,那么您希望在数据库中尽可能少地处理,并尽可能在客户端中进行处理。将日期转换为字符是系统上不必要的负载(字符计算总是慢于数学)。
答案 5 :(得分:0)
这可能有效:
case when ISNULL(convert(varchar, a.rec_dt, 108), '00:00:00')='00:00:00' then ''
else CAST(rec_dt as varchar)