避免从秒和毫秒部分的条件

时间:2018-12-07 06:35:04

标签: sql sql-server

我正在使用下面的sql从1分钟后创建的表中获取记录

    SELECT Id,OrderNumber FROM ActivationRequest 
    WHERE Processed =0 AND 
    DateCreated <= DATEADD(minute,Convert(int,-1), GETDATE())

DateCreated:将插入日期类型为Datetime且在插入具有秒和毫秒的长datettime值时的列

在执行选择操作时,我们可以以某种方式避免秒和毫秒的部分吗?

示例:DateCreated值2018-12-07 07:08:41.703

但是当我在2018-12-07 07:08:51.597进行上述选择sql时,它返回了0条记录。由于datetime的毫秒部分仅为.597

所以我该如何避免秒和毫秒的部分,而只需在where条件下检查小时和分钟的部分。 我需要获取最后一分钟添加的所有记录,而与秒和毫秒值无关

2 个答案:

答案 0 :(得分:2)

您可以四舍五入到最近的分钟:

SELECT Id, OrderNumber
FROM ActivationRequest 
WHERE
    Processed = 0 AND 
    DateCreated <= DATEADD(mi, DATEDIFF(mi, 0, GETDATE()) + 1, 0);

以下是一个演示,演示了与GETDATE()一起使用的上述演算背后的逻辑:

here

上述查询应具有相当好的性能,因为它可以在DateCreated上使用索引。

答案 1 :(得分:0)

试试这个..

SELECT Id, OrderNumber
FROM ActivationRequest 
WHERE
Processed = 0 AND 
FORMAT(DateCreated,'dd:mm:yyyy:hh:mm') = FORMAT(GETDATE(),'dd:mm:yyyy:hh:mm');