是否有方法选择created_at (日期时间)- updated_at (日期时间)>2分钟的所有行?
我用过这样的方法,但差别是很大的,不可靠:
SELECT TOP (1000)
[id],
[created_at],
[updated_at],
CAST(
CAST([updated_at]-[created_at] as timestamp) as bigint
) as diff
FROM [dbo].[VoicePasswordReset]
WHERE CAST( CAST([updated_at]-[created_at] as timestamp) as bigint) > 360
ORDER BY created_at DESC;收到的记录:
id created_at updated_at diff
d9932bac-fd87-42a3-b647-8e334c016b1a 2023-06-02 12:03:36.267 2023-06-02 12:04:37.000 18220
b99cc8f4-99bc-4833-95a8-76c8e14c77b1 2023-06-02 10:36:52.837 2023-06-02 10:37:44.000 15349
fa076677-54fc-45ae-8de5-6d68fc782b74 2023-06-02 08:57:49.397 2023-06-02 08:58:51.000 18481
b63f58d4-ce5e-4c44-8649-60690efac0d7 2023-06-02 08:10:43.020 2023-06-02 08:11:48.000 19494
eb3b2b5f-11dc-4221-b05d-be83e1701b30 2023-06-02 07:58:53.483 2023-06-02 07:59:12.000 5555
46d0b1f3-74d4-4cd0-be2f-3baed2fd9ac9 2023-06-02 07:53:07.370 2023-06-02 07:53:17.000 2889
b0264169-4d64-4470-95b1-58a3867b5717 2023-06-02 07:51:27.000 2023-06-02 07:52:05.000 11400发布于 2023-06-02 13:07:50
与其得到值之间的差异,我更愿意这样做
WHERE updated_at < DATEADD(MINUTE, 2, created_at)也就是说,只需向该值添加2分钟,即可获得一个可用于比较的值。
这将确保返回正确的行。
对于diff列,您可能需要DATEDIFF,但您需要理解这并不是将差异计算为时间间隔,然后返回该间隔的日期部分。
它只是返回的“指定日期部分的边界跨越的计数”。
DATEDIFF(YEAR, '2023-12-31 23:59:59', '2024-01-01 00:00:00') /*Returns 1*/因此,您可能更喜欢在DATEDIFF中获得MILLISECOND,然后自己进行舍入,以获得更好地反映值之间实际时间差的结果。
https://dba.stackexchange.com/questions/327816
复制相似问题