我只想过3个月的交易

时间:2016-08-12 02:19:57

标签: sql sql-server-2008

需要帮助。我只想过3个月的交易。

SELECT * 
FROM transaction
WHERE TransactionDate >= GETDATE()-90

transactionDate是一种INT类型,格式为YYYYMMDD(例如20160812)

我收到了这个错误

  

将表达式转换为数据类型datetime的算术溢出错误。

任何帮助都可以

1 个答案:

答案 0 :(得分:4)

您无法将int直接转换为日期。但是,您可以转换YYYYMMDD格式的字符串。所以,试试这个:

WHERE cast(cast(TransactionDate as varchar(255)) as date) >= GETDATE() - 90

或者,您可以在当前日期进行所有转换:

WHERE TransactionDate >= CONVERT(INT, CONVERT(VARCHAR(255), GETDATE() - 90, 112))

此方法的优点是引擎可以使用TransactionDate上的索引。

也就是说,存储列的正确方法是DATE。 SQL Server有内置的日期/时间数据类型,原因很简单;对他们有很多直接的支持。使用数据库的功能。