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 дней – он выбирает все записи.

Может кто-то указать мне верное направление? Похоже, я рядом.

Спасибо, у меня отличная неделя.

Вам нужно применить 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() 
  • Создайте ListView с выбираемыми строками / измените цвет фона строк ListView при нажатии
  • Давайте будем гением компьютера.