如果为NULL,SQLServer DATETIME转换为STRING

时间:2015-06-30 15:47:05

标签: sql-server

我的DB中的datetime列(type = datetime)如下

enter image description here

为什么此声明未将'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,

我缺少什么?

干杯 保罗

2 个答案:

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