MySql поиск диапазона дат с месяцем и днем (любой год)

0

Например, если у меня есть строка поиска "2017-12-14", тогда мне нужно найти все строки, соответствующие 7-дневному диапазону: "% -12-11", "% -12-12", "% -12- 13 ","% -12-14 ","% -12-15 ","% -12-16 ","% -12-17 ".

Можно ли делать только с MySql?

Теги:

2 ответа

0
Лучший ответ

Чтобы выбрать один и тот же день, вы можете использовать следующий трюк.

  1. получить список последних 7 дней /1 неделю NOW() - INTERVAL 1 WEEK
  2. получить DAYOFYEAR того дня
  3. искать в базе данных все значения одного и того же дня в году

,

SELECT * FROM timevalues
WHERE DAYOFYEAR(timefield) IN (
  SELECT DAYOFYEAR(timefield)
  FROM timevalues
  WHERE DATE(timefield) BETWEEN NOW() - INTERVAL 1 WEEK AND NOW()
  )
;

Примечание: Високосный год не учитывается!
Согласно моему краткому исследованию в соответствии с високосным годом, было бы проще расширить SQL-запрос с допуском на 1 день, то есть использовать - INTERVAL 8 DAY вместо 7 а затем управлять действительностью дня вне базы данных во время обработки данных в петле.

  • 0
    TNX! работает отлично.
  • 0
    Большой! И, пожалуйста, примите ответ: stackoverflow.com/help/someone-answers
0

Да, это возможно.

Функция, которую вы ищете, составляет + / - INTERVAL expr unit. См. Функции даты и времени MySQL

Таким образом, чтобы получить 7 дней назад использования - INTERVAL 7 DAY:

SELECT *
FROM tablename
WHERE DATE(timefield) BETWEEN '2017-12-14' - INTERVAL 7 DAY AND '2017-12-14'

В соответствии с вашим примером будет достаточно использовать -INTERVAL 1 WEEK:

SELECT *
FROM tablename
WHERE DATE(timefield) BETWEEN '2017-12-14' - INTERVAL 1 WEEK AND '2017-12-14'

И список всех возможных единиц

MICROSECOND SECOND MINUTE HOUR DAY WEEK MONTH QUARTER YEAR SECOND_MICROSECOND MINUTE_MICROSECOND MINUTE_SECOND HOUR_MICROSECOND HOUR_SECOND HOUR_MINUTE DAY_MICROSECOND DAY_SECOND DAY_MINUTE DAY_HOUR YEAR_MONTH

  • 0
    предмет немного сложнее, чем этот. В вашем примере показаны строки только с указанным годом. Мне нужно найти строки, которые соответствуют этому 1-недельному интервалу (месяц-день) со всеми годами.
  • 0
    Да, вы правы, я не заметил этого в названии вопроса. Я читаю только описание ..

Ещё вопросы

Сообщество Overcoder
Наверх
Меню