SQL, где предложение для двух дат ровно один месяц минус одна секунда друг от друга? - PullRequest
1 голос
/ 27 октября 2011

У меня есть два столбца даты и времени в таблице, и я хотел бы выбрать именно те строки, чья разница от первого столбца до второго столбца составляет одну секунду, меньшую одного месяца. Например, он выберет эти строки (и никаких других) для даты и времени в 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 Ответ

3 голосов
/ 27 октября 2011
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)))

Это говорит: «Покажите мне строки, где column2 (на один месяц больше и на одну секунду меньше), чем col1».

Встроенная логика дат в SQL Server автоматически учитывает такие вещи, как високосные годы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...