使用IS NULL转换NULL日期

时间:2017-06-07 12:41:00

标签: sql tsql sql-server-2016

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

SELECT jobs.name,
       CASE WHEN jact.start_execution_date IS NULL THEN 'No Execution'
            ELSE jact.start_exeuction_date
       END AS start_execution_date
FROM   msdb.dbo.sysjobactivity jact
       INNER JOIN msdb.dbo.sysjobs jobs
         ON jact.job_id = jobs.job_id

start_execution_date列是DATETIME类型。此列的日期时间格式为(YYYY-MM-DD HH:MM:SS.mmm)或其中为NULL。我甚至尝试使用COALESCE使代码更容易阅读,但这也没有用,并给出了同样的错误。查看返回的结果集到错误点时,它在第一行中失败,该行在此列中具有NULL。我做错了什么/不考虑?

SELECT COALESCE(jact.start_execution_date, 'No Execution')

2 个答案:

答案 0 :(得分:1)

您的结果集(此查询的输出)必须在每个字段中具有相同的字段类型。它就像派生表一样,因此您无法与ActiveWorkbook.Sheets.Select Range(Cells(100, 2), Cells(142, MarketRangeColumn + 10)).Select Selection.Style = "Comma" Selection.numberformat = "_(* #,##0.0_);_(* (#,##0.0);_(* ""-""??_);_(@_)" Selection.numberformat = "_(* #,##0_);_(* (#,##0);_(* ""-""??_);_(@_)" Range(Cells(143, 2), Cells(146, MarketRangeColumn + 10)).Select Selection.Style = "Percent" 中的日期位于同一字段中的varchar 'No Execution'

但是,您可以将日期转换为jact.start_execution_date,如:

VARCHAR()

只要知道你的日期现在是一个字符串日期,如果在某处输出它就没问题。

答案 1 :(得分:1)

据推测,start_execution_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()函数本身。