Sql 使用IS NULL转换空日期

Sql 使用IS NULL转换空日期,sql,tsql,sql-server-2016,Sql,Tsql,Sql Server 2016,我正在运行一个查询,以更改SQL Server 2016中返回的一些数据,我收到一个转换错误(从字符串转换日期和/或时间时转换失败) 开始执行日期列是日期时间类型。此列的日期时间格式为(YYYY-MM-DD HH:MM:SS.mmm)或为空。我甚至尝试使用COALESCE使代码更易于阅读,但这也不起作用,并给出了相同的错误。当查看设置为错误点的返回结果时,此列中第一行的NULL失败。我做错了什么/没有考虑什么 SELECT COALESCE(jact.start_execution_date,

我正在运行一个查询,以更改SQL Server 2016中返回的一些数据,我收到一个转换错误(从字符串转换日期和/或时间时转换失败)

开始执行日期列是日期时间类型。此列的日期时间格式为(YYYY-MM-DD HH:MM:SS.mmm)或为空。我甚至尝试使用COALESCE使代码更易于阅读,但这也不起作用,并给出了相同的错误。当查看设置为错误点的返回结果时,此列中第一行的NULL失败。我做错了什么/没有考虑什么

SELECT COALESCE(jact.start_execution_date, 'No Execution')
结果集(此查询的输出)必须在每个字段中具有相同的字段类型。它类似于一个派生表,因此您不能将varchar
'No Execution'
与您的日期从
jact.start\u Execution\u date
驻留在同一字段中

但是,您可以将日期强制转换为
VARCHAR()
,如:

COALESCE(CAST(jact.start_execution_date AS VARCHAR(20), 'No Execution') as start_execution_date

只需知道您的日期现在是一个字符串日期,如果在某处输出,这是可以的。

大概,
start\u execution\u date
是一个日期。所以,你需要转换它。最简单的方法是:

SELECT . . .,
       COALESCE(CONVERT(VARCHAR(255), jact.start_execution_date), 
                'No Execution'
               ) as start_execution_date
FROM msdb.dbo.sysjobactivity jact INNER JOIN
     msdb.dbo.sysjobs jobs
     ON jact.job_id = jobs.job_id;

可以添加第三个参数来指定结果的格式。或者,使用
FORMAT()
函数本身。

您不能对不同的返回类型使用
case
。在您的case中使用varchar和date。
SELECT . . .,
       COALESCE(CONVERT(VARCHAR(255), jact.start_execution_date), 
                'No Execution'
               ) as start_execution_date
FROM msdb.dbo.sysjobactivity jact INNER JOIN
     msdb.dbo.sysjobs jobs
     ON jact.job_id = jobs.job_id;