我有一个查询,向我显示生产时间。今天,我发现当时间超过24小时时,它会失败。我使用datediff
,但是它不能在超过24小时内正常工作。
u_daily_work_alb.u_diferencial_machine
是我存储时间值的地方。如果时间到23:00:00
有效,但超过该时间无效。
错误是:
The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.
CASE WHEN LEN(u_machines_alb.u_reference) > 1 THEN
MAX(convert(float, datediff(second, 0, u_daily_work_alb.u_diferencial_machine) / (60.0 * 60.0)))
END AS timeDecimal
u_daily_work_alb.u_diferencial_machine
列存储以下值:
最后一行返回报告的错误。
我该如何解决这个问题?
谢谢
答案 0 :(得分:1)
如何在无效时间上仅使用常数来删除计算?
(CASE WHEN LEN(u_machines_alb.u_reference) > 1
THEN MAX(CONVERT(float, 1.0))
END) AS timeDecimal
如果您将数据存储为字符串,请使用try_convert()
:
(CASE WHEN LEN(u_machines_alb.u_reference) > 1 AND
TRY_CONVERT(time, u_daily_work_alb.u_diferencial_machine) IS NULL
THEN 1.0
END) AS timeDecimal
或者也许:
(CASE WHEN LEN(u_machines_alb.u_reference) > 1
THEN MAX(datediff(second, 0,
TRY_CONVERT(time, u_daily_work_alb.u_diferencial_machine)
)
) / (60.0 * 60.0)
END AS timeDecimal
答案 1 :(得分:0)
我认为我正确理解了这个问题,您正在寻找以十进制表示的日期差吗?如果希望datediff除法的输出为float,则需要在除法之前将除数转换为float。
请查看是否能给您所需的结果
select MAX(datediff(second, 0, u_machines_alb.u_reference) / Convert(float, 86400))