SQL-如何将时间转换为超过24小时的小数

时间:2019-11-13 15:38:04

标签: sql sql-server

我有一个查询,向我显示生产时间。今天,我发现当时间超过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列存储以下值: enter image description here

最后一行返回报告的错误。

我该如何解决这个问题?

谢谢

2 个答案:

答案 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))