sql - 如何连接 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
)
解决方案
不知道你为什么要让自己变得如此复杂。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
推荐阅读
- javascript - 有没有办法优化这个 Promise 循环,这样我就不会出现 FATAL JavaScript heap out of memory 错误了?
- python - 试图从另一个函数中捕获异常
- java - 如何更改单击的按钮的颜色,但使其只能同时更改一个按钮的颜色?
- django - 以 HTML 格式发送电子邮件不显示上下文
- graphics - 如何计算图形和方程中带有 x 的值的值?
- python - 如何使用 PyGame 制作“退出”按钮单击事件以关闭程序
- javascript - (猫鼬)如何在帖子和评论模型之间进行双向引用
- sql - 将员工登录数据与用户登录数据混合在一起,还是有两个不同的表?
- unity3d - Unity 3D:如何只面对卡一半
- javascript - 如何使用 yaml 转储 (js-yaml) 干净地处理未定义的值