SQL Server:使用case语句查看日期是否为NULL以及它是否返回''

时间:2010-07-20 17:23:54

标签: sql sql-server tsql

我的select语句中有一列如下所示:

SELECT CASE WHEN fu.SentOutDate IS NULL THEN '' ELSE fu.SentOutDate END

这将返回1900-01-01 00:00:00.000,否则将为NULL

我知道这一点,因为当我放入fu.SentOutDate时,它会显示为NULL

为什么会发生这种情况,我怎样才能让它返回空值?

6 个答案:

答案 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)