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()