【发布时间】:2021-09-15 20:46:44
【问题描述】:
如果 datediff 函数返回空值,我想在列上放置“无记录”而不是 NULL。
SELECT concat(e.firstname ,e.lastname) as Fullname,c.shiftcode as Shift, cast(c.datecheckinout as date) Date,datename(month, c.datecheckinout) as RecordMonth,c.timein , c.timeout,
CAST(
CASE
WHEN (datediff(HOUR,c.timein,c.timeout) IS NULL)
THEN 'No record'
END
), FROM tblCheckInOutDetail c RIGHT JOIN tblEmployee e on e.IdEmployee = c.IdEmployee WHERE e.IdEmployee = 55
到目前为止,此代码仅在“CAST”附近抛出不正确的语法,应为“AS”。但我不知道应该在 CAST 参数中输入什么数据类型,因为如果有记录,它将显示日期时间。
【问题讨论】:
-
尝试删除演员表,但我得到了,但它抛出 将 varchar 值“无记录”转换为数据类型 int 时转换失败。 ` CASE WHEN (datediff(HOUR,c. timein,c.timeout) IS NULL) THEN 'No record' ELSE (datediff(HOUR,c.timein,c.timeout) ) END `
-
ISNULL(datediff(HOUR,c.timein,c.timeout),'n/No Record') as H也不起作用 -
鉴于您有 c.timein 和 c.timeout 列,我们可以假设 c.datecheckinout 是 DATE 吗?如果是这样,你为什么要投它?如果不是,为什么不使用该列的日期数据类型?您应该为用作列的表达式提供良好的别名。并且请在您的原始帖子中添加任何有用的信息,而不是作为列。
-
嗨,@smor。是的 c.datecheckinout 是一个日期时间,我只想获取日期格式。是的,谢谢你的提醒。谢谢大佬。
标签: sql sql-server