【发布时间】:2019-05-08 14:04:12
【问题描述】:
试图获取日期时间字段和时间字段之间的分钟差。我正在使用 datediff 函数。
当开始时间从一个日期开始,如“2018-01-08 22:35:55.043”,结束时间为第二天,如“00:35:56.2136644”,结果从结束时间开始计数到开始时间。
例子:
select DATEDIFF(MINUTE, CAST('2018-01-08 22:35:55.043' AS TIME), '00:35:56.2136644') AS minDiff1
select DATEDIFF(MINUTE, '00:35:56.2136644', CAST('2018-01-08 22:35:55.043' AS TIME)) AS minDiff2
select DATEDIFF(MINUTE, CONVERT(TIME, '2018-01-08 22:35:55.043'), '00:35:56.2136644') AS minDiff3
select DATEDIFF(MINUTE, '00:35:56.2136644', CONVERT(TIME, '2018-01-08 22:35:55.043')) AS minDiff4
结果与我的预期不同。期望的结果是 120 分钟。
minDiff1 = -1320
minDiff2 = 1320
minDiff3 = -1320
minDiff4 = 1320
原始查询
select DATEDIFF(MINUTE, CAST(test_start_datetime as TIME), test_end_time) AS minDiff
from user_exam
【问题讨论】:
-
将您的时间字段转换为日期字段 - 这是使其可靠的唯一方法。
-
这是模棱两可的。它在哪里说 00:35:56.2136644 是 2018-01-09 00:35:56.2136644 而不是 2018-01-10 00:35:56.2136644 或 2099-01-09 00:35:56.2136644。存储完整日期。
-
你怎么知道一个时间是在 any 给定的一天,例如从 23:00 到 23:10 可能是 13 天零十分钟?是否有一些可以应用的限制,例如间隔从不超过 8 小时,因此 09:00 到 08:00 无效,因为它会(至少)23 小时?
-
如果您意识到它是按天计算的,您显然需要将天与时间包括在内,即日期时间。因此,为函数提供 2 个日期时间,而不是坚持时间或将日期时间转换为时间。
标签: sql sql-server tsql datetime time