使用SQL

时间:2017-03-22 15:09:08

标签: sql sql-server tsql

我有一个事务表,主键是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函数?

1 个答案:

答案 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)

避免datetimedatetime2(7)之间的任何隐式转换:

如果transactionDate是本地时间和datetime数据类型,那么您将使用getdate()

如果transactionDate是本地时间和datetime2数据类型,那么您将使用sysdatetime()

如果transactionDate是UTC时间(协调世界时)和datetime数据类型,那么您将使用getutcdate()

如果transactionDate是UTC时间(协调世界时)和datetime2数据类型,那么您将使用sysutcdatetime()

数据类型和函数结果之间的差异在此解释:sysdatetime()