Sql server 如果为NULL,则将SQLServer日期时间转换为字符串
我的数据库中的datetime列(type=datetime)如下所示 为什么此语句不将“1900-01-01 00:00:00.000”值转换为“日期未设置”Sql server 如果为NULL,则将SQLServer日期时间转换为字符串,sql-server,Sql Server,我的数据库中的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, 我错过了什
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,
我错过了什么
干杯
保罗:你的案例陈述不起作用。CASE语句的结果必须是单个数据类型。您试图在一种情况下返回varchar(“未设置日期”),在另一种情况下返回日期
您必须在所有情况下返回相同的数据类型。您的CASE语句无法工作。CASE语句的结果必须是单个数据类型。您试图在一种情况下返回varchar(“未设置日期”),在另一种情况下返回日期
在所有情况下都必须返回相同的数据类型。如果您尝试此代码,您将看到,当您将其转换为varchar时,它并不等于您将其与之进行比较的字符串:
declare @Startdate as datetime
set @Startdate='1900-01-01 00:00:00.000'
select CONVERT(VARCHAR, @StartDate)
您想比较datetime
类型。您需要将日期输出为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,
如果您尝试此代码,您将看到,当您将其转换为varchar时,它并不等于您将其与之进行比较的字符串:
declare @Startdate as datetime
set @Startdate='1900-01-01 00:00:00.000'
select CONVERT(VARCHAR, @StartDate)
您想比较datetime
类型。您需要将日期输出为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,
稍微有点奇怪,所以我将把它作为一个注释而不是答案发布:因为“1900-01-01 00:00:00.000”是
DATETIME
类型的基线值,所以当[TB_EVNTCERT].StartDate=0时,您可以简化为类似的情况。。。其他的结束
稍微有点过时,所以我将把它作为一个注释而不是答案发布:因为“1900-01-01 00:00:00.000”是DATETIME
类型的基线值,您可以简化为类似于CASE WHEN[TB_EVNTCERT]。StartDate=0然后。。。其他的结束