我正在运行查询以更改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')
答案 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()
函数本身。