Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如果为NULL,则将SQLServer日期时间转换为字符串_Sql Server - Fatal编程技术网

Sql server 如果为NULL,则将SQLServer日期时间转换为字符串

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, 我错过了什

我的数据库中的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,
我错过了什么

干杯
保罗:你的案例陈述不起作用。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然后。。。其他的结束