我有一个事务表,其主键为transcationId,字符串为transactionType,样式为datetime stamp
2017-03-09 20:49:13.870
我想选择3分钟前进行的transactionType'CreditCard'的所有交易。我有
SELECT *
FROM TRANSACTION
WHERE transactionType ='CreditCard'
AND transactionDate < dateadd(minute, -3, GETDATE())
那是在这种情况下如何使用dateadd函数?
最佳答案
是的,如果您的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()
。