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 дней - он выбирает все записи.
Может ли кто-нибудь указать мне в правильном направлении? Мне кажется, что я рядом.
Спасибо, у меня отличная неделя.
Ответы
Ответ 1
Вам нужно применить 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()
Ответ 2
SELECT
*
FROM
< table_name >
WHERE
< date_field > BETWEEN DATE_SUB(NOW(), INTERVAL 30 DAY)
AND NOW();
Ответ 3
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()
Ответ 4
Вы также можете написать это в MySQL -
SELECT DATE_FORMAT(create_date, '%m/%d/%Y')
FROM mytable
WHERE create_date < DATE_ADD(NOW(), INTERVAL -1 MONTH);
FIXED
Ответ 5
Для текущей активности и полной активности за предыдущие 30 дней используйте это, так как SYSDATE является переменной за один день, в предыдущий 30-й день не будет всего данных за этот день.
SELECT DATE_FORMAT(create_date, '%m/%d/%Y')
FROM mytable
WHERE create_date BETWEEN CURDATE() - INTERVAL 30 DAY AND SYSDATE()
Ответ 6
Я бы сделал что-то вроде этого:
SELECT DATE_FORMAT(create_date, '%m/%d/%Y')
FROM mytable
WHERE create_date >= (CURDATE() - INTERVAL 30 DAY)
Ответ 7
Здесь решение без использования функции curdate()
, это решение для тех, кто использует TSQL
, я думаю,
SELECT myDate
FROM myTable
WHERE myDate BETWEEN DATEADD(DAY, -30, GETDATE()) AND GETDATE()