簡體   English   中英

選擇DATEDIFF少過2分鍾的唱片

[英]Selecting records younger then 2 minutes with DATEDIFF

我目前面臨以下問題:

  • 我想從數據庫表LocationUpdates中為特定的RFIDTagID選擇所有記錄,並且ScannedTime比當前時間小2分鍾。
  • 我給sql兩個參數:1. RFIDTagID(僅需要使用此tagID在數據庫中選擇結果,2. ScannedTime(CurrentTimeStamp)。
  • 現在,我想問一下數據庫:給我所有RFIDTagID 123456789的記錄,其中ScannedTime最多比第二個參數ScannedTime早2分鍾。
  • 當SQL返回結果時:不要添加行。
  • whenm SQL不返回結果:不必添加行。

我正在制作一個存儲過程來執行此任務。 看起來如下:

  • 建立程序
  • 從dbo中選擇COUNT(*)。LocationUpdates更新在哪里更新.RFIDTagID = @RFIDTagID和DATEDIFF(MINUTE,@ ScannedTime,updates.ScannedTime)<2
  • 如果@@ 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

當我執行以下查詢(使用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函數將提供負整數,因此,當數據庫中的時間比當前時間早兩分鍾時,它將返回-2。

我會取代

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

如果第二個參數大於第三個參數(日期),則結果為負。 而且...的負結果小於2。

通過

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

或反轉參數

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM