我有一个事务表,主键是transcationId,字符串transactionType和日期时间戳,格式为
2017-03-09 20:49:13.870
我想选择transactionType' CreditCard'的所有交易。发生在3分钟前。我有
SELECT *
FROM TRANSACTION
WHERE transactionType ='CreditCard'
AND transactionDate < dateadd(minute, -3, GETDATE())
在这种情况下,如何使用dateadd函数?
答案 0 :(得分:1)
是的,如果您的dateadd()
基于服务器时间并且是transactionDate
数据类型,则这是在10分钟前使用datetime
的正确方法。
select *
from [transaction]
where transactionType = 'CreditCard'
and transactionDate < dateadd(minute, -3, getdate())
如果你想截断到分钟,你可以使用:
select *
from [transaction]
where transactionType = 'CreditCard'
and transactionDate < dateadd(minute, datediff(minute, 0, getdate() )-3, 0)
避免datetime
和datetime2(7)
之间的任何隐式转换:
如果transactionDate
是本地时间和datetime
数据类型,那么您将使用getdate()
。
如果transactionDate
是本地时间和datetime2
数据类型,那么您将使用sysdatetime()
。
如果transactionDate
是UTC时间(协调世界时)和datetime
数据类型,那么您将使用getutcdate()
。
如果transactionDate
是UTC时间(协调世界时)和datetime2
数据类型,那么您将使用sysutcdatetime()
。
数据类型和函数结果之间的差异在此解释:sysdatetime()
。