计算 SQL 中的时差
Calculate time difference in SQL
我们在 SQL 中有两列。一个是 total_work_time
,下一个是 total_exeption_time
,两个列的数据类型都是 varchar
total_work_time
值为 07:15:00
total_exeption_time
值为 01:15:00
所以我需要减去 total_work_time
- total_exeption_time
结果将是 06:00:00.
我试过 concat(DATEDIFF(HOUR,total_exeption_time,total_work_time),':', DATEDIFF(MINUTE,total_exeption_time,total_work_time))
但结果是6:360。由此看来,360 是问题所在,总共花费了几分钟。我需要像 06:00:00
这样的结果结构。如何使用 SQL 服务器解决此问题。
您应该将时间值存储在 TIME
数据类型中 - 使用正确的数据类型不仅是最佳实践,而且会减少您将来面临的问题。
您可以将 VARCHAR
值转换为 TIME
,然后使用以下计算以秒为单位计算差值(假设您感兴趣的最低单位)并创建一个新的 TIME
结果。
DECLARE @total_work_time TIME = '07:15:00', @total_exeption_time TIME = '01:15:00';
SELECT CONVERT(TIME, DATEADD(SECOND, DATEDIFF(SECOND, @total_exeption_time, @total_work_time), '00:00'));
我们在 SQL 中有两列。一个是 total_work_time
,下一个是 total_exeption_time
,两个列的数据类型都是 varchar
total_work_time
值为 07:15:00
total_exeption_time
值为 01:15:00
所以我需要减去 total_work_time
- total_exeption_time
结果将是 06:00:00.
我试过 concat(DATEDIFF(HOUR,total_exeption_time,total_work_time),':', DATEDIFF(MINUTE,total_exeption_time,total_work_time))
但结果是6:360。由此看来,360 是问题所在,总共花费了几分钟。我需要像 06:00:00
这样的结果结构。如何使用 SQL 服务器解决此问题。
您应该将时间值存储在 TIME
数据类型中 - 使用正确的数据类型不仅是最佳实践,而且会减少您将来面临的问题。
您可以将 VARCHAR
值转换为 TIME
,然后使用以下计算以秒为单位计算差值(假设您感兴趣的最低单位)并创建一个新的 TIME
结果。
DECLARE @total_work_time TIME = '07:15:00', @total_exeption_time TIME = '01:15:00';
SELECT CONVERT(TIME, DATEADD(SECOND, DATEDIFF(SECOND, @total_exeption_time, @total_work_time), '00:00'));