首页 > 解决方案 > 如何连接 2 个不同的数字以使其看起来像小数但实际上是 varchar 而不会丢失小数部分的位置?

问题描述

我正在尝试计算小时和分钟,但分钟部分正在删除前导 0,并且看起来计算不正确。

例如,9.06 显示为 9.6 使用此查询对值

时钟输入 2020-01-07 23:00:53.000
时钟输出 2020-01-08 07:06:52.000

这导致计算的时间为 8.6:

concat(datediff(n,ClockIn,ClockOut)/60,'.',
    case when len(datediff(n,ClockIn,ClockOut) - ((datediff(n,ClockIn,ClockOut)/60) * 60)) = 1 
        then concat(0,cast(datediff(n,ClockIn,ClockOut) - ((datediff(n,ClockIn,ClockOut)/60) * 60)as varchar(2)))
        else datediff(n,ClockIn,ClockOut) - ((datediff(n,ClockIn,ClockOut)/60) * 60)
    end 
)

标签: sqlsql-server

解决方案


不知道你为什么要让自己变得如此复杂。DATEDIFF函数将根据函数的第一个参数为您提供小时和分钟:

SELECT 
concat(thehours,'.',
DATEDIFF(minute, '2017/08/25 07:00', '2017/08/25 12:45')-(60*thehours)) AS timediff
FROM (
  SELECT DATEDIFF(hour, '2017/08/25 07:00', '2017/08/25 12:45') AS thehours
) a

推荐阅读