使用 IS NULL 转换 NULL 日期
Using IS NULL to convert NULL dates
我是 运行 查询以更改 SQL Server 2016 中的一些返回数据,我收到转换错误(转换日期 and/or 时间时转换失败字符串).
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 的第一行失败。我在做什么 wrong/not 考虑?
SELECT COALESCE(jact.start_execution_date, 'No Execution')
您的结果集(此查询的输出)必须在每个字段中具有相同的字段类型。它就像派生的 table,因此您不能将 varchar 'No Execution'
与 jact.start_execution_date
中的日期驻留在同一字段中。
但是,您可以将日期转换为 VARCHAR()
,例如:
COALESCE(CAST(jact.start_execution_date AS VARCHAR(20), 'No Execution') as start_execution_date
只要知道你的日期现在是一个字符串日期,如果它被输出到某个地方就可以了。
据推测,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()
函数本身。
我是 运行 查询以更改 SQL Server 2016 中的一些返回数据,我收到转换错误(转换日期 and/or 时间时转换失败字符串).
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 的第一行失败。我在做什么 wrong/not 考虑?
SELECT COALESCE(jact.start_execution_date, 'No Execution')
您的结果集(此查询的输出)必须在每个字段中具有相同的字段类型。它就像派生的 table,因此您不能将 varchar 'No Execution'
与 jact.start_execution_date
中的日期驻留在同一字段中。
但是,您可以将日期转换为 VARCHAR()
,例如:
COALESCE(CAST(jact.start_execution_date AS VARCHAR(20), 'No Execution') as start_execution_date
只要知道你的日期现在是一个字符串日期,如果它被输出到某个地方就可以了。
据推测,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()
函数本身。