SQL的月差异

时间:2011-02-25 22:37:13

标签: sql sql-server tsql

考虑日期时间字段Fld1

如何使用SQL查询检查此值是否早于3个月前?

4 个答案:

答案 0 :(得分:9)

从其他问题看,它看起来像SQL Server。

已经给出的2个SQL Server答案不是SARGable (link);他们无法利用指数。

WHERE datecolumn < DATEADD(month, -3, GETDATE())

3个月前构建一个日期并对其进行测试;这将能够使用索引。此声明适用于任何DBMS。

如果您在整个日历月之后,例如

  • 当前日期= 2011年2月24日
  • 3个月前= 2010年11月(无视某一天的日期)
  • required = 2010年11月及之前的任何日期

WHERE datecolumn <= DATEADD(month, datediff(month, 0, getdate()) -2, 0)

答案 1 :(得分:1)

SQL Server:

select * from table where DATEDIFF(m, dateColumn, GETDATE()) < 3

答案 2 :(得分:0)

(假设Microsoft SQL Server T-SQL):

尝试DateDiff功能。

... WHERE DATEDIFF(month, Fld1, GETDATE()) >= 3 ...

答案 3 :(得分:0)

<强>的MySQL

SELECT * FROM table WHERE Fld1 <= DATE_SUB(CURDATE(), INTERVAL 3 MONTH)

这将选择超过3个月的元素。如果您想要比三个月前更新的元素,只需将<=更改为>=