Разница месяцев в SQL - PullRequest
       1

Разница месяцев в SQL

3 голосов
/ 26 февраля 2011

Рассмотрим поле даты и времени Fld1.

Как проверить, является ли это значение старше 3 месяцев назад с помощью SQL-запроса?

Ответы [ 4 ]

9 голосов
/ 26 февраля 2011

Из других ваших вопросов он выглядит как SQL Server.

Уже даны 2 ответа на SQL Server: SARGable (ссылка) ;они не могут использовать индексы.

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

Создайте дату 3 месяца назад и проверьте ее;это позволит использовать индексы.Это утверждение справедливо для любой СУБД.

Если вы находитесь после полных календарных месяцев, например,

  • текущая дата = 24-фев-2011
  • 3 месяца назад =Ноябрь - 2010 (без учета дня месяца)
  • обязательно = любая дата в ноябре 2010 года и ранее

WHERE datecolumn <= DATEADD(month, datediff(month, 0, getdate()) -2, 0)
1 голос
/ 26 февраля 2011

SQL Server:

select * from table where DATEDIFF(m, dateColumn, GETDATE()) < 3
0 голосов
/ 26 февраля 2011

MySQL

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

При этом будут выбраны элементы старше 3 месяцев. Если вы хотите, чтобы элементы были новее, чем три месяца назад, просто измените <= на >=.

0 голосов
/ 26 февраля 2011

(Предполагается, что Microsoft SQL Server T-SQL):

Попробуйте функцию DateDiff .

... WHERE DATEDIFF(month, Fld1, GETDATE()) >= 3 ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...