我在表中有两个日期时间列,我想精确选择那些与第一列到第二列的差异为一个月短一秒的行。例如,它会为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年将需要考虑闰年。
我该怎么写这样的陈述?
答案 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中的内置日期逻辑会自动解决闰年等问题。