MySQL Query – записи между сегодняшним и последним 30 днями
Я хочу вернуть все записи, которые были добавлены в базу данных за последние 30 дней. Мне нужно преобразовать дату в mm / dd / yy из-за отображения.
create_date between DATE_FORMAT(curdate(),'%m/%d/%Y') AND (DATE_FORMAT(curdate() - interval 30 day,'%m/%d/%Y'))
Мое заявление не позволяет ограничить записи за последние 30 дней – он выбирает все записи.
Может кто-то указать мне верное направление? Похоже, я рядом.
- MySQL SELECT WHERE datetime соответствует день (и не обязательно время)
- Почему django prefetch_related () работает только со всеми (), а не с фильтром ()?
- T-SQL получает значение SELECTed хранимой процедуры
- Как изменить цвет фона выбора ListBox?
- Алгоритм для нахождения k наименьших чисел в массиве из n элементов
Спасибо, у меня отличная неделя.
- Скопируйте выбранный диапазон на другой рабочий лист
- # 1139 - Получил ошибку «операнд-оператор повторения-оператора недействителен» из regexp
- Пользовательский одиночный выбор ListView
- WPF ListView Неактивный цвет выделения
- XPath: выберите текстовый узел
- Понимание алгоритма «медианы медианов»
- Как получить случайные данные из базы данных oracleа?
- Примечание. Преобразование массива в строку в
Вам нужно применить DATE_FORMAT
в предложении SELECT
, а не в WHERE
:
SELECT DATE_FORMAT(create_date, '%m/%d/%Y') FROM mytable WHERE create_date BETWEEN CURDATE() - INTERVAL 30 DAY AND CURDATE()
Также обратите внимание, что CURDATE()
возвращает только часть DATE
даты, поэтому, если вы храните create_date
в качестве DATETIME
с заполненной частью времени, этот запрос не будет выбирать сегодняшние записи.
В этом случае вам нужно вместо этого использовать NOW
:
SELECT DATE_FORMAT(create_date, '%m/%d/%Y') FROM mytable WHERE create_date BETWEEN NOW() - INTERVAL 30 DAY AND NOW()
SELECT * FROM < table_name > WHERE < date_field > BETWEEN DATE_SUB(NOW(), INTERVAL 30 DAY) AND NOW();
DATE_FORMAT
возвращает строку, поэтому вы используете две строки в предложении BETWEEN
, которое не будет работать так, как вы ожидаете.
Вместо этого конвертируйте дату в формат в SELECT
и сделайте BETWEEN
на фактические даты. Например,
SELECT DATE_FORMAT(create_date, '%m/%d/%y') as create_date_formatted FROM table WHERE create_date BETWEEN (CURDATE() - INTERVAL 30 DAY) AND CURDATE()
Вы также можете написать это в mysql –
SELECT DATE_FORMAT(create_date, '%m/%d/%Y') FROM mytable WHERE create_date < DATE_ADD(NOW(), INTERVAL +1 MONTH);
Для текущей активности и полной активности за предыдущие 30 дней используйте это, так как SYSDATE является переменной за один день, на предыдущий 30-й день не будет всего данных за этот день.
SELECT DATE_FORMAT(create_date, '%m/%d/%Y') FROM mytable WHERE create_date BETWEEN CURDATE() - INTERVAL 30 DAY AND SYSDATE()
Вот решение, не использующее curdate()
, это решение для тех, кто использует TSQL
SELECT myDate FROM myTable WHERE myDate BETWEEN DATEADD(DAY, -30, GETDATE()) AND GETDATE()