我需要选择所有30天以前的记录。我有下面的代码,但它不起作用。在updatestatus中,我的日期是2011年12月26日。我创造了一个30天的约会
$onemonthago="01/01/2012";
$sth = $dbh->prepare(qq(
SELECT *
FROM people
WHERE STR_TO_DATE (updatestatus,'%m/%d/%y')
<= STR_TO_DATE ( "$onemonthago",'%m/%d/%Y')
) );
最佳答案
如果updatestatus
的数据类型是date
:
SELECT *
FROM people
WHERE updatestatus <= '2012-01-01'
或:
SELECT *
FROM people
WHERE updatestatus <= CURRENT_DATE() - INTERVAL 1 MONTH
如果数据类型是
datetime
或timestamp
并且您也要检查时间部分:SELECT *
FROM people
WHERE updatestatus <= NOW() - INTERVAL 1 MONTH
您可以输入准确的日期时间,而不是
NOW() - INTERVAL 1 MONTH
。正确的方法取决于存储日期时间或时间戳的方式(Perl代码或MySQL首先创建它们吗?).你也可以把
- INTERVAL 30 DAY
放进去,结果略有不同。