Например, если у меня есть строка поиска "2017-12-14", тогда мне нужно найти все строки, соответствующие 7-дневному диапазону: "% -12-11", "% -12-12", "% -12- 13 ","% -12-14 ","% -12-15 ","% -12-16 ","% -12-17 ".
Можно ли делать только с MySql?
Чтобы выбрать один и тот же день, вы можете использовать следующий трюк.
NOW() - INTERVAL 1 WEEK
DAYOFYEAR
того дня,
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
а затем управлять действительностью дня вне базы данных во время обработки данных в петле.
Да, это возможно.
Функция, которую вы ищете, составляет + / - 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