我有一个事务表,其主键为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)


为了避免在datetimedatetime2(7)之间进行任何隐式转换:

如果transactionDate是当地时间并且是datetime数据类型,则应使用getdate()

如果transactionDate是当地时间并且是datetime2数据类型,则应使用sysdatetime()

如果transactionDate是UTC时间(世界标准时间)和datetime数据类型,则应使用getutcdate()

如果transactionDate是UTC时间(世界标准时间)和datetime2数据类型,则应使用sysutcdatetime()

数据类型和函数结果之间的差异在此处说明:sysdatetime()

10-07 19:47
查看更多