sql - 连接小时和分钟列以十进制格式显示 SQL 查询

标签 sql sql-server datetime time date-difference

我的 SQL Server 表中有两个 datetime 列:

+--------------------------+------------------------+
| CompLast_SignON_datetime | comp_accidentdate_time |
+--------------------------+------------------------+
| 16-12-2021 04:08         | 16-12-2021 05:10       |
| 17-12-2021 14:20         | 17-12-2021 20:00       |
| 18-12-2021 12:15         | 18-12-2021 15:25       |
| 22-12-2021 06:00         | 22-12-2021 12:34       |
| 25-12-2021 11:30         | 25-12-2021 21:40       |
| 26-12-2021 21:00         | 27-12-2021 02:50       |
+--------------------------+------------------------+

我通过 SQL 查询将小时和分钟分开

SELECT 
    CompLast_SignON_datetime, comp_accidentdate_time, 
    CONVERT(INT, ROUND((DATEDIFF(minute, CompLast_SignON_datetime, comp_accidentdate_time) / 60), 2, 1)) AS 'Hours', 
    FORMAT(CONVERT(INT, DATEDIFF(minute, CompLast_SignON_datetime, comp_accidentdate_time) - CONVERT(INT, (ROUND((DATEDIFF(minute, CompLast_SignON_datetime, comp_accidentdate_time) / 60), 2, 1)) * 60)), '00') AS 'Minutes' 
FROM Safety_SIMS

输出为

+--------------------------+------------------------+-------+---------+
| CompLast_SignON_datetime | comp_accidentdate_time | Hours | Minutes |
+--------------------------+------------------------+-------+---------+
| 16-12-2021 04:08         | 16-12-2021 05:10       |     1 |      02 |
| 17-12-2021 14:20         | 17-12-2021 20:00       |     5 |      40 |
| 18-12-2021 12:15         | 18-12-2021 15:25       |     3 |      10 |
| 22-12-2021 06:00         | 22-12-2021 12:34       |     6 |      34 |
| 25-12-2021 11:30         | 25-12-2021 21:40       |    10 |      10 |
| 26-12-2021 21:00         | 27-12-2021 02:50       |     5 |      50 |
+--------------------------+------------------------+-------+---------+

现在,为了进一步对数据进行分组,我需要将“小时”和“分钟”列连接到一列中以获得这样的输出

+--------------------------+------------------------+------------+
| CompLast_SignON_datetime | comp_accidentdate_time | Duty_hours |
+--------------------------+------------------------+------------+
| 16-12-2021 04:08         | 16-12-2021 05:10       | 1.02       |
| 17-12-2021 14:20         | 17-12-2021 20:00       | 5.40       |
| 18-12-2021 12:15         | 18-12-2021 15:25       | 3.10       |
| 22-12-2021 06:00         | 22-12-2021 12:34       | 6.34       |
| 25-12-2021 11:30         | 25-12-2021 21:40       | 10.10      |
| 26-12-2021 21:00         | 27-12-2021 02:50       | 5.50       |
+--------------------------+------------------------+------------+

最佳答案

由于您显示的是分钟而不是小时的一小部分,因此使用 : 会更自然。而不是.

然后您可以使用 DATEDIFF 和 FORMAT 以字符串形式获取小时和分钟的差异。

select *
, [Duty_hours] = format(datediff(hour, CompLast_SignON_datetime, comp_accidentdate_time), '00')
                 + format(comp_accidentdate_time - CompLast_SignON_datetime, ':mm')
from Safety_SIMS;
<表类=“s-表”> <标题> CompLast_SignON_datetime comp_accidentdate_time Duty_hours <正文> 2021-12-16 04:08 2021-12-16 05:10 01:02 2021-12-17 14:20 2021-12-17 20:00 06:40 2021-12-18 12:15 2021-12-18 15:25 03:10 2021-12-22 06:00 2021-12-22 12:34 06:34 2021-12-25 11:30 2021-12-25 21:40 10:10 2021-12-26 21:00 2021-12-27 02:50 05:50

db<>fiddle 上的演示 here

可以简化

select *
, [Duty_hours] = format(comp_accidentdate_time - CompLast_SignON_datetime, 'HH:mm')
from Safety_SIMS;

但是您假设差异始终小于一天。

这是一个以小数形式计算时差的版本。

select *
, [Duty_hours] = datediff(hour, CompLast_SignON_datetime, comp_accidentdate_time)
                 + cast(format(comp_accidentdate_time - CompLast_SignON_datetime, '.mm') as decimal(10,2))
from Safety_SIMS;

关于sql - 连接小时和分钟列以十进制格式显示 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70542065/

相关文章:

sql - 去年的 YTD 编号查询

php - 迭代并比较 2 个数组

MySQL DELETE with JOIN 使用 LIMIT 语句获取语法错误

sql - 负选择 SQL 查询

c++ - 如何使用 C++ 将字符串日期时间插入 mysql

c# - 如何解析日期时间秒.ms

sql - 数据库架构设计问题

sql-server - 如何在 ODBC SQLCommand 表达式中传递 SSIS 变量?

c# - 哪些 C# 数据类型不是 WCF 可序列化的?

php - 将当前日期时间插入自定义 WordPress 日期时间列