TSQL空数据''替换

时间:2015-10-02 08:07:25

标签: sql sql-server tsql sql-server-2005

我有以下查询:

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,我试图投射和替换也没有成功。

我如何实现目标?

6 个答案:

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