我想返回过去30天内添加到数据库的所有记录。由于显示目的,我需要将日期转换为mm / dd / yy。
create_date between DATE_FORMAT(curdate(),'%m/%d/%Y') AND (DATE_FORMAT(curdate() - interval 30 day,'%m/%d/%Y'))
我的陈述未能将记录限制在过去30天 - 它会选择所有记录。
有人能指出我正确的方向吗?感觉就像我很亲密。
谢谢,祝你有个愉快的一周。
答案 0 :(得分:246)
您需要在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()
答案 1 :(得分:51)
SELECT
*
FROM
< table_name >
WHERE
< date_field > BETWEEN DATE_SUB(NOW(), INTERVAL 30 DAY)
AND NOW();
答案 2 :(得分: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()
答案 3 :(得分:9)
你也可以在mysql中写这个 -
SELECT DATE_FORMAT(create_date, '%m/%d/%Y')
FROM mytable
WHERE create_date < DATE_ADD(NOW(), INTERVAL +1 MONTH);
答案 4 :(得分:6)
对于当前日期活动和前30天的完整活动,请使用此项,因为SYSDATE在一天中变量,前一个30天将不具有该日的所有数据。
SELECT DATE_FORMAT(create_date, '%m/%d/%Y')
FROM mytable
WHERE create_date BETWEEN CURDATE() - INTERVAL 30 DAY AND SYSDATE()
答案 5 :(得分:1)
这是一个不使用curdate()
函数的解决方案,对于那些使用TSQL
的人来说这是一个解决方案我想
SELECT myDate
FROM myTable
WHERE myDate BETWEEN DATEADD(DAY, -30, GETDATE()) AND GETDATE()