MySQL查询 - 今天和过去30天之间的记录

时间:2010-01-11 11:48:40

标签: mysql date select

我想返回过去30天内添加到数据库的所有记录。由于显示目的,我需要将日期转换为mm / dd / yy。

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

我的陈述未能将记录限制在过去30天 - 它会选择所有记录。

有人能指出我正确的方向吗?感觉就像我很亲密。

谢谢,祝你有个愉快的一周。

6 个答案:

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