我目前面临以下问题:
- 我想从我的数据库表 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) < 2
- IF @@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。