MySQL 查询-从今天到最后30天的记录

我要返回过去30天内添加到数据库中的所有记录。我需要将日期转换为 mm/dd/广州欢聚时代,因为显示的目的。

create_date between DATE_FORMAT(curdate(),'%m/%d/%Y') AND (DATE_FORMAT(curdate() - interval 30 day,'%m/%d/%Y'))

我的声明没有将记录限制在过去30天内——它选择了所有的记录。

有人能告诉我正确的方向吗? 感觉就快了。

谢谢,祝你这周愉快。

318089 次浏览

你需要在 SELECT子句中应用 DATE_FORMAT,而不是在 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()

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()
SELECT
*
FROM
< table_name >
WHERE
< date_field > BETWEEN DATE_SUB(NOW(), INTERVAL 30 DAY)
AND NOW();

对于当前日期活动和之前30天的完成活动,使用此选项,因为 SYSDATE 在前30天的某一天是可变的,所以不会有该天的全部数据。

SELECT  DATE_FORMAT(create_date, '%m/%d/%Y')
FROM mytable
WHERE create_date BETWEEN CURDATE() - INTERVAL 30 DAY AND SYSDATE()

您也可以在 mysql-中编写此代码

SELECT  DATE_FORMAT(create_date, '%m/%d/%Y')
FROM    mytable
WHERE   create_date < DATE_ADD(NOW(), INTERVAL -1 MONTH);

修好了

这里有一个不使用 curdate()函数的解决方案,我想这是一个为那些使用 TSQL的人提供的解决方案

SELECT myDate
FROM myTable
WHERE myDate BETWEEN DATEADD(DAY, -30, GETDATE()) AND GETDATE()

下面是其他答案中没有显示的公式,表明可以在不使用“ BETWEEN WEEN”操作符和/或 DATE _ ADD ()/DATE _ SUB ()函数的情况下返回最后30天的数据值:

SELECT DATE_FORMAT(create_date, '%m/%d/%y')
FROM table
WHERE create_date > (curdate() - interval 30 day);

注意,如果只存储日期,请使用 curdate () ,如果有时间戳,请使用 now ()。

请参阅 Quassnoi 的回答,以了解其中的原因。