SQL服务器:使用case语句,看看日期为NULL,如果它返回“”

问题描述:

我在select语句的列,看起来像这样:SQL服务器:使用case语句,看看日期为NULL,如果它返回“”

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

这将返回1900-01-01 00:00:00.000的救世主否则为NULL

我知道这是因为,当我把在短短fu.SentOutDate它出来作为NULL

为什么会出现这种情况,我如何才能得到它返回一个空值?

它铸造你的“”为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 

列只能返回一个数据类型 - DATETIME!= string/VARCHAR。

如果要在值为NULL的情况下使用零长度字符串,则必须使用CAST/CONVERT将显式更改数据类型以将非NULL值更改为VARCHAR/etc数据类型。

尝试的日期转换为字符串,因此不会尝试转换'为日期:

(CASE WHEN fu.SentOutDate IS NULL THEN '' ELSE CONVERT(varchar,fu.SentOutDate) END) 

如果”重新检查NULL值,你可以尝试ISNULL()并将日期转换为varchar。

SELECT ISNULL(CAST(fu.SentOutDate为varchar(50)), '')AS SendOutDate FROM表名

这听起来像你的地方显示的GUI或客户端此值。在我看来,最好的做法是将其从NULL值转换而来,而不是在查询中。

如果您创建的数据库可以扩展到数百万用户,那么您希望尽可能在数据库中进行一些处理,并尽可能在客户端进行处理。将日期转换为字符是系统上不必要的负载(字符计算总是比数学慢得多)。

这可能工作:

case when ISNULL(convert(varchar, a.rec_dt, 108), '00:00:00')='00:00:00' then '' 
    else CAST(rec_dt as varchar)