整个空日期它呃偿还
TSQL Null data to '' replace
我有以下查询:
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
,我也尝试对其进行转换和替换,但均未成功。
我怎样才能实现我的目标?
SELECT
ISNULL(CONVERT(varchar(10),pics.e_firedate,120),'') e_firedate
FROM et_pics
您必须 cast/convert 日期时间字段,而不是其他值 - 例如:
case
when pics.e_firedate is null
then ''
else cast(pics.e_firedate as nvarchar(30))
end
好吧,您数据库中的列似乎是 DATETIME
列。所以 SQL 服务器将 ''
转换为默认日期值。
一个解决方案可能是将 所有 结果转换为字符串,如:
SELECT ISNULL(CONVERT(NVARCHAR, pics.e_firedate), '') AS e_firedateString
FROM et_pics
尝试:
select isNUll(CONVERT(VARCHAR, pics.e_firedate, 120), '') e_firedate
FROM et_pics
那是因为在使用 CASE
表达式时,return 值必须具有相同的数据类型。如果它们具有不同的数据类型,所有值都将转换为带有 higher data type precedence 的类型。
并且由于 DATETIME
的数据类型高于 VARCHAR
,因此 ''
被转换为 DATETIME
:
SELECT CAST('' AS DATETIME)
以上会return1900-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。
效率会更高吗?也可能不会。
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
我有以下查询:
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
,我也尝试对其进行转换和替换,但均未成功。
我怎样才能实现我的目标?
SELECT
ISNULL(CONVERT(varchar(10),pics.e_firedate,120),'') e_firedate
FROM et_pics
您必须 cast/convert 日期时间字段,而不是其他值 - 例如:
case
when pics.e_firedate is null
then ''
else cast(pics.e_firedate as nvarchar(30))
end
好吧,您数据库中的列似乎是 DATETIME
列。所以 SQL 服务器将 ''
转换为默认日期值。
一个解决方案可能是将 所有 结果转换为字符串,如:
SELECT ISNULL(CONVERT(NVARCHAR, pics.e_firedate), '') AS e_firedateString
FROM et_pics
尝试:
select isNUll(CONVERT(VARCHAR, pics.e_firedate, 120), '') e_firedate
FROM et_pics
那是因为在使用 CASE
表达式时,return 值必须具有相同的数据类型。如果它们具有不同的数据类型,所有值都将转换为带有 higher data type precedence 的类型。
并且由于 DATETIME
的数据类型高于 VARCHAR
,因此 ''
被转换为 DATETIME
:
SELECT CAST('' AS DATETIME)
以上会return1900-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。
效率会更高吗?也可能不会。
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