Jas*_*eet 112 mysql select date
我想返回过去30天内添加到数据库的所有记录.由于显示目的,我需要将日期转换为mm/dd/yy.
create_date between DATE_FORMAT(curdate(),'%m/%d/%Y') AND (DATE_FORMAT(curdate() - interval 30 day,'%m/%d/%Y'))
Run Code Online (Sandbox Code Playgroud)
我的陈述未能将记录限制在过去30天 - 它选择所有记录.
谁能指出我正确的方向?感觉就像我很亲密.
谢谢,祝你有个愉快的一周.
Qua*_*noi 262
您需要DATE_FORMAT
在SELECT
条款中申请,而不是WHERE
条款:
SELECT DATE_FORMAT(create_date, '%m/%d/%Y')
FROM mytable
WHERE create_date BETWEEN CURDATE() - INTERVAL 30 DAY AND CURDATE()
Run Code Online (Sandbox Code Playgroud)
另请注意,CURDATE()
仅返回DATE
日期的一部分,因此如果您将时间部分填充create_date
为a DATETIME
,则此查询将不会选择今天的记录.
在这种情况下,您需要使用NOW
:
SELECT DATE_FORMAT(create_date, '%m/%d/%Y')
FROM mytable
WHERE create_date BETWEEN NOW() - INTERVAL 30 DAY AND NOW()
Run Code Online (Sandbox Code Playgroud)
小智 54
SELECT
*
FROM
< table_name >
WHERE
< date_field > BETWEEN DATE_SUB(NOW(), INTERVAL 30 DAY)
AND NOW();
Run Code Online (Sandbox Code Playgroud)
Ric*_*ams 10
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()
Run Code Online (Sandbox Code Playgroud)
你也可以在mysql中写这个 -
SELECT DATE_FORMAT(create_date, '%m/%d/%Y')
FROM mytable
WHERE create_date < DATE_ADD(NOW(), INTERVAL -1 MONTH);
Run Code Online (Sandbox Code Playgroud)
小智 6
对于当前日期活动和前30天的完整活动,请使用此项,因为SYSDATE在一天中变量,前30天将不具有该日的整个数据.
SELECT DATE_FORMAT(create_date, '%m/%d/%Y')
FROM mytable
WHERE create_date BETWEEN CURDATE() - INTERVAL 30 DAY AND SYSDATE()
Run Code Online (Sandbox Code Playgroud)