将日期时间从12小时格式转换为24小时格式

时间:2020-06-24 18:07:15

标签: sql-server

给出以下数据:

+--------------------------+--------------------------+
| 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值,因此在这些值上运行CONVERTCAST命令不会执行任何操作。

那么如何将这些值转换为24小时格式?

我看了Convert a 12 hour format to 24 hour format in sql server

的答案

仍然茫然。

谢谢!

2 个答案:

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

结果集:

enter image description here