使用DATEDIFF选择2分钟以内的记录

时间:2013-07-19 06:51:59

标签: sql datediff

我目前面临以下问题:

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

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

  • 创建程序
  • SELECT COUNT(*)FROM dbo.LocationUpdates更新WHERE updates.RFIDTagID = @RFIDTagID AND DATEDIFF(MINUTE,@ ScannedTime,updates.ScannedTime)< 2
  • IF @@ ROWCOUNT = 0然后执行一些任务并添加行
  • ELSE DOHINGHING

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

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

AND当我执行以下查询时(使用currentdate):

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会给出负的int,因此当数据库中的时间比当前时间早两分钟时,它将返回-2。

1 个答案:

答案 0 :(得分:1)

我会替换

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

如果第二个参数大于第三个参数(日期),则会产生否定结果。并且......负面结果小于2.

通过

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

或反转参数

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