我在SSMS中有一个返回1900-01-01
的查询,如何准确地使用CASE WHEN
将1900-01-01
替换为''
(空白而不是空)。
CAST(ISNULL(CAST(CONVERT(DATE, cmmt.[CmmtExpirationDate], 101) AS NVARCHAR(20)), '') AS DATE) AS [Cmmt Expiration Date]
结果:1900-01-01
我尝试了这个,但没有运气(可怕的语法):
CASE
WHEN (CAST(ISNULL(cast(convert(Date, cmmt.[CmmtExpirationDate] , 101) as nvarchar(20)), '') = '1900-01-01')
THEN ''
ELSE CAST(ISNULL(cast(convert(Date, cmmt.[CmmtExpirationDate] , 101) as nvarchar(20)),'') AS DATE
END
答案 0 :(得分:1)
表达式的结果需要具有固定的数据类型。由于DATE
不是有效日期,因此无法''
。 nvarchar(20)
是一个选项,但这意味着即使不是1900-01-01
,您的结果也会是字符串。
一旦你接受了,解决方案很简单:
CASE WHEN cmmt.[CmmtExpirationDate] = '1900-01-01'
THEN CONVERT(nvarchar(20), cmmt.[CmmtExpirationDate])
ELSE CONVERT(nvarchar(20), '')
END
您可能希望将desired output format指定为第一个CONVERT
语句的第三个参数。
(我认为CmmtExpirationDate
的类型为DATE
,因为如果它不是,那么问题中应该提到它。)
答案 1 :(得分:0)
您可以使用如下的try_convert:
try_convert(date, case when datecolumn='' then null else datecolumn end)