我的DB中的datetime列(type = datetime)如下
为什么此声明未将'1900-01-01 00:00:00.000'值转换为'未设置日期'
ISNULL(
CASE WHEN CONVERT(VARCHAR, [TB].Date) = '1900-01-01 00:00:00.000'
THEN 'date not set'
ELSE CONVERT(DATE, [TB].Date, 25)
END, '') AS Xdate,
我缺少什么?
干杯 保罗
答案 0 :(得分:2)
您的CASE声明无效。 CASE语句的结果必须是单个数据类型。您试图在一种情况下返回varchar(“未设置日期”),在另一种情况下返回DATE。
在所有情况下,您必须返回相同的数据类型。
答案 1 :(得分:2)
如果您尝试使用此代码,您会看到当您将其转换为varchar时,它不等于您将其与之比较的字符串:
declare @Startdate as datetime
set @Startdate='1900-01-01 00:00:00.000'
select CONVERT(VARCHAR, @StartDate)
您想要比较datetime
类型。而且您需要将日期输出为varchar
,因为您还想输出不是日期的'date not set'
。您不能有条件地输出不同的类型......只有一个或另一个可以是您的案例陈述的类型。
因此,您需要在表达式中交换日期/ varchar转换:
ISNULL(
CASE WHEN CONVERT(DATE, [TB_EVNTCERT].StartDate) = '1900-01-01 00:00:00.000' THEN
'date not set'
ELSE
CONVERT(VARCHAR, [TB_EVNTCERT].StartDate, 25)
END, '') AS expirydate,