在 SQL Server 中,尝试以下操作:
WITH tmp_table AS (
SELECT '2022-02-01 01:00:00' AS StartTime, '2022-02-01 01:31:31' AS EndTime
UNION ALL
SELECT '2022-02-01 02:00:00' AS StartTime, '2022-02-01 04:00:00' AS EndTime
UNION ALL
SELECT '2022-02-01 02:00:00' AS StartTime, '2022-02-02 16:00:00' AS EndTime
UNION ALL
SELECT '2022-02-01 02:00:00' AS StartTime, '2022-02-02 01:59:59' AS EndTime
)
SELECT
StartTime,
EndTime,
CONCAT(REPLACE(STR(CAST(DATEDIFF(SECOND,StartTime,EndTime) / 3600 AS VARCHAR(2)), 2), SPACE(1), '0') ,RIGHT(CAST(CONVERT(varchar, DATEADD(ms, DATEDIFF(SECOND,StartTime,EndTime) * 1000, 0), 108) AS VARCHAR(8)),6)) AS "HH:MM:SS Format"
FROM tmp_table;
结果:
StartTime EndTime HH:MM:SS Format
2022-02-01 01:00:00 2022-02-01 01:31:31 00:31:31
2022-02-01 02:00:00 2022-02-01 04:00:00 02:00:00
2022-02-01 02:00:00 2022-02-02 16:00:00 38:00:00
2022-02-01 02:00:00 2022-02-02 01:59:59 23:59:59
第 1 步: 获取小时数并以字符串形式返回。我们还用 '0' 填充最多 2 个空格,这将返回格式为 (HH)
REPLACE(STR(CAST(DATEDIFF(SECOND,StartTime,EndTime) / 3600 AS VARCHAR(2)), 2), SPACE(1), '0')
第 2 步: 代码的以下部分通过删除小时返回 (:MM:SS)(如果持续时间超过 24 小时,则可以重置为 0)。这是作为字符串返回的
RIGHT(CAST(CONVERT(varchar, DATEADD(ms, DATEDIFF(SECOND,StartTime,EndTime) * 1000, 0), 108) AS VARCHAR(8)),6)
第 3 步:将 2 个字符串连接在一起得到 HH:MM:SS
CONCAT(REPLACE(STR(CAST(DATEDIFF(SECOND,StartTime,EndTime) / 3600 AS VARCHAR(2)), 2), SPACE(1), '0') ,RIGHT(CAST(CONVERT(varchar, DATEADD(ms, DATEDIFF(SECOND,StartTime,EndTime) * 1000, 0), 108) AS VARCHAR(8)),6))