两个日期的SQL where子句恰好相隔一个月减去一秒?

时间:2011-10-27 18:59:04

标签: sql-server-2008

我在表中有两个日期时间列,我想精确选择那些与第一列到第二列的差异为一个月短一秒的行。例如,它会为2011年的日期时间选择这些行(而不是其他行):

col1                col2
2011-01-01 00:00:00 2011-01-31 23:59:59
2011-02-01 00:00:00 2011-02-28 23:59:59
2011-03-01 00:00:00 2011-03-31 23:59:59
2011-04-01 00:00:00 2011-04-30 23:59:59
2011-05-01 00:00:00 2011-05-31 23:59:59
2011-06-01 00:00:00 2011-06-30 23:59:59
2011-07-01 00:00:00 2011-07-31 23:59:59
2011-08-01 00:00:00 2011-08-31 23:59:59
2011-09-01 00:00:00 2011-09-30 23:59:59
2011-10-01 00:00:00 2011-10-31 23:59:59
2011-11-01 00:00:00 2011-11-30 23:59:59
2011-12-01 00:00:00 2011-12-31 23:59:59

但是,例如,选择2012年将需要考虑闰年。

我该怎么写这样的陈述?

1 个答案:

答案 0 :(得分:3)

SELECT *
FROM Table
WHERE col2 = DATEADD(second, -1, (DATEADD(Month, 1 Col1)))
-- check for either direction
OR col1 = DATEADD(second, -1, (DATEADD(Month, 1 Col2)))

这就是说,“向我展示第2列的行(比col1少一个月,少一个月)。”

SQL Server中的内置日期逻辑会自动解决闰年等问题。

相关问题