【问题标题】:Selecting records younger then 2 minutes with DATEDIFF使用 DATEDIFF 选择小于 2 分钟的记录
【发布时间】:2013-07-19 06:51:58
【问题描述】:

我目前面临以下问题:

  • 我想从我的数据库表 LocationUpdates 中为特定的 RFIDTagID 和 ScannedTime 选择与当前时间相比小于 2 分钟的所有记录。
  • 我给 sql 提供了两个参数:1. RFIDTagID(需要仅选择具有此 tagID 的数据库中的结果,2. ScannedTime (CurrentTimeStamp)。
  • 现在我想询问数据库:给我 RFIDTagID 123456789 的所有记录,其中 ScannedTime 最大 2 分钟早于第二个参数 ScannedTime。
  • 当 SQL 返回结果时:比不添加行。
  • Whenm SQL 不返回结果:您必须添加行。

我正在制作一个存储过程来执行此任务。如下所示:

  • 创建过程
  • SELECT COUNT(*) FROM dbo.LocationUpdates 更新 WHERE updates.RFIDTagID = @RFIDTagID AND DATEDIFF(MINUTE, @ScannedTime, updates.ScannedTime)
  • 如果 @@ROWCOUNT = 0 则执行一些任务并添加行
  • 什么都不做

我的数据库中有以下数据:

160 300833B2DDD9014035050005    18-7-2013 11:18:44
161 300833B2DDD9014035050005    18-7-2013 11:19:50
162 300833B2DDD9014035050005    18-7-2013 11:24:03
163 300833B2DDD9014035050005    18-7-2013 13:38:50
164 300833B2DDD9014035050005    18-7-2013 13:39:29
165 300833B2DDD9014035050005    1-1-1900 0:00:00

当我执行以下查询时(使用当前日期):

DECLARE @return_value Int
DECLARE @currDate DATETIME
SET @currDate = GETDATE()

EXEC    @return_value = [dbo].[INSERT_LOCALROW]
        @RFIDTagID = N'300833B2DDD9014035050005',           
        @ScannedTime = @currDate

SELECT  'Return Value' = @return_value

GO

此查询返回以下结果:6 行 但我希望得到 0 行作为回报,因为没有一个结果与当前时间相差两分钟。

有人有什么建议吗?

编辑

我已经找到答案了:

SELECT COUNT(*) FROM dbo.LocationUpdates updates WHERE updates.RFIDTagID = @RFIDTagID AND DATEDIFF(MINUTE, @ScannedTime, updates.ScannedTime) > -2

当你比较一个较新的日期和一个较旧的日期时,函数 DateDiff 给出一个负整数,所以当数据库中的时间比当前时间早两分钟时,它将返回 -2。

【问题讨论】:

    标签: sql datediff


    【解决方案1】:

    我会替换

    DATEDIFF(MINUTE, @ScannedTime, updates.ScannedTime) < 2
    

    因为如果第二个参数大于第三个参数(日期),你会得到一个否定的结果。并且...否定结果小于 2。

    通过

    updates.ScannedTime > DATEADD(MINUTE, -2, @ScannedTime)
    

    或反转参数

    DATEDIFF(MINUTE,  updates.ScannedTime, @ScannedTime) < 2
    

    【讨论】:

    • 谢谢!我反转了参数,所以函数返回一个正整数。祝你有美好的一天!
    猜你喜欢
    • 2015-09-28
    • 2012-12-15
    • 2013-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多