我目前面临以下问题:
我正在制作一个存储过程来执行此任务。它看起来如下:
我的数据库中有以下数据:
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。
答案 0 :(得分:1)
我会替换
DATEDIFF(MINUTE, @ScannedTime, updates.ScannedTime) < 2
如果第二个参数大于第三个参数(日期),则会产生否定结果。并且......负面结果小于2.
通过
updates.ScannedTime > DATEADD(MINUTE, -2, @ScannedTime)
或反转参数
DATEDIFF(MINUTE, updates.ScannedTime, @ScannedTime) < 2