Mysql Datediff запрос - PullRequest
       17

Mysql Datediff запрос

8 голосов
/ 10 октября 2011

Мне нужно получить результат из таблицы, в которой дата должна отличаться от 5 от текущей даты.

т.е., столбец specific_date присутствует в моей таблице.Формат даты: YYYY-MM-DD.

Мне нужен запрос, например,

SELECT * FROM `table_name` WHERE DATEDIFF(NOW(), specific_date) < 5

Ответы [ 2 ]

11 голосов
/ 10 октября 2011

Похоже, вы пытаетесь это сделать:

WHERE specific_date < (NOW() + 5 days)

Прежде всего, внимательно подумайте о граничных случаях.Эти граничные случаи могут кусать ваши лодыжки в SQL.Вы действительно хотите

WHERE specific_date <= (NOW() + 5 days)

В ваших specific_date отметках времени столбцов содержатся только дни (то есть даты со временем, равным полуночи), или они содержат даты и время?Если вы хотите получить желаемый результат, вы должны быть осторожны с этими деталями.

В любом случае, попробуйте это:

WHERE specific_date <= DATE_ADD(NOW(), INTERVAL 5 DAY)

Это хороший способ сделатьтакой поиск.Значение столбца стоит отдельно с одной стороны от предиката неравенства (<=), поэтому mySQL может выполнять сканирование диапазона индекса, если у вас есть индекс для столбца.

Арифметика дат в MySQL довольно гибкая.Вы можете сделать

   NOW() + INTERVAL 10 SECOND
   NOW() - INTERVAL 2 MINUTE
   NOW() + INTERVAL 4 HOUR
   CURDATE() - INTERVAL 1 WEEK /* midnight one week ago */
   LAST_DAY(NOW()) + INTERVAL 1 DAY - INTERVAL 1 MONTH  /*first day of present month*/
   NOW() - INTERVAL 1 QUARTER
   CURDATE() - INTERVAL 5 YEAR

и пр.

3 голосов
/ 10 октября 2011

Посмотрите на оператора BETWEEN.

expr BETWEEN min AND max

Другой способ - использовать оператор DATE_SUB

WHERE date_column > DATE_SUB(NOW(), INTERVAL 5 DAY)
...