给出以下数据:
+--------------------------+--------------------------+
| Started | Ended |
+--------------------------+--------------------------+
| 2020-06-08 01:09:46.000 | 2020-06-08 01:29:51.000 |
| 2020-06-09 12:55:40.000 | 2020-06-09 01:28:33.000 |
| 2020-06-10 12:59:30.000 | 2020-06-10 01:24:37.000 |
+--------------------------+--------------------------+
我需要将它们转换为24小时格式。我的最终目标是获得这两个值之间的时间差(以分钟为单位),但是12小时制的事实阻碍了我的努力。
不幸的是,它们是有效的datetime
值,因此在这些值上运行CONVERT
或CAST
命令不会执行任何操作。
那么如何将这些值转换为24小时格式?
我看了Convert a 12 hour format to 24 hour format in sql server
的答案仍然茫然。
谢谢!
答案 0 :(得分:0)
您可以在update子句中使用case语句来检查您的业务逻辑(1:00-7:00是PM时间)。
DATEPART函数检查日期时间对象的小时部分。如果小时数少于8(即1-7),请使用DATEADD函数将日期添加12小时。下面是我使用的脚本和示例表。
脚本
UPDATE
[MySchema].[TestDates]
SET
DateIn24Hr = CASE WHEN DATEPART("hh", DateInAMPM) < 8 THEN DATEADD(hour, 12, DateInAMPM) ELSE DateInAMPM END
TestDates之前
+--------------------------+--------------------------+
| DateInAMPM | DateIn24Hr |
+--------------------------+--------------------------+
| 2020-06-08 01:09:46.000 | NULL |
| 2020-06-09 06:12:46.000 | NULL |
| 2020-06-10 09:12:46.000 | NULL |
| 2020-06-11 12:12:46.000 | NULL |
+--------------------------+--------------------------+
TestDates之后
+--------------------------+--------------------------+
| DateInAMPM | DateIn24Hr |
+--------------------------+--------------------------+
| 2020-06-08 01:09:46.000 | 2020-06-08 13:09:46.000 |
| 2020-06-09 06:12:46.000 | 2020-06-09 18:12:46.000 |
| 2020-06-10 09:12:46.000 | 2020-06-10 09:12:46.000 |
| 2020-06-11 12:12:46.000 | 2020-06-11 12:12:46.000 |
+--------------------------+--------------------------+
答案 1 :(得分:0)
无需转换日期时间以获取分钟差异
利用DATEDIFF函数获得两个日期之间的净分钟差。
使用模函数,删除归因于日差的分钟。
在下面的示例中,时差为6小时(6小时* 60分钟/小时)= 360分钟。
--need some sample data
with smple AS ( SELECT
getdate() AS start_dt,
dateadd(day, 1, dateadd(hour, 6, getdate())) AS end_dt)
--end sample data
SELECT
start_dt,
end_dt,
datediff(minute, start_dt, end_dt) %1440 as Min_Diff
FROM smple;
结果集: