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



может ли кто-нибудь указать мне в правильном направлении? Такое чувство, что я близко.



спасибо и иметь большую неделю.

520   6  

6 ответов:

вам нужно подать заявку 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()

вот решение без использования

Comments

    Ничего не найдено.