I want to return all records that were added to the database within the last 30 days. I need to convert the date to mm/dd/yy because of display purposes.
create_date between DATE_FORMAT(curdate(),'%m/%d/%Y') AND (DATE_FORMAT(curdate() - interval 30 day,'%m/%d/%Y'))
My statement fails to limit the records to the last 30 days - it selects all the records.
Can anyone point me in the right direction? It feels like I am close.
Thanks and have a great week.
Here's a solution without using curdate()
function, this is a solution for those who use TSQL
I guess
SELECT myDate
FROM myTable
WHERE myDate BETWEEN DATEADD(DAY, -30, GETDATE()) AND GETDATE()
SELECT
*
FROM
< table_name >
WHERE
< date_field > BETWEEN DATE_SUB(NOW(), INTERVAL 30 DAY)
AND NOW();
For the current date activity and complete activity for previous 30 days use this, since the SYSDATE is variable in a day the previous 30th day will not have the whole data for that day.
SELECT DATE_FORMAT(create_date, '%m/%d/%Y')
FROM mytable
WHERE create_date BETWEEN CURDATE() - INTERVAL 30 DAY AND SYSDATE()
DATE_FORMAT
returns a string, so you're using two strings in your BETWEEN
clause, which isn't going to work as you expect.
Instead, convert the date to your format in the SELECT
and do the BETWEEN
for the actual dates. For example,
SELECT DATE_FORMAT(create_date, '%m/%d/%y') as create_date_formatted
FROM table
WHERE create_date BETWEEN (CURDATE() - INTERVAL 30 DAY) AND CURDATE()
You can also write this in mysql -
SELECT DATE_FORMAT(create_date, '%m/%d/%Y')
FROM mytable
WHERE create_date < DATE_ADD(NOW(), INTERVAL -1 MONTH);
FIXED
Source: Stackoverflow.com