我需要选择30天以前的所有记录.我有下面的代码,但它不起作用.在updatestatus中,我的日期为12/26/2011.我创建了一个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')
) );
Run Code Online (Sandbox Code Playgroud)
如果数据类型updatestatus是date:
SELECT *
FROM people
WHERE updatestatus <= '2012-01-01'
Run Code Online (Sandbox Code Playgroud)
要么:
SELECT *
FROM people
WHERE updatestatus <= CURRENT_DATE() - INTERVAL 1 MONTH
Run Code Online (Sandbox Code Playgroud)
如果数据类型是datetime或者timestamp您想要检查时间部分:
SELECT *
FROM people
WHERE updatestatus <= NOW() - INTERVAL 1 MONTH
Run Code Online (Sandbox Code Playgroud)
您可以输入确切的日期时间而不是NOW() - INTERVAL 1 MONTH.正确的方法取决于您存储日期时间或时间戳的方式(Perl代码或MySQL是否首先创建它们?).
您还可以将- INTERVAL 30 DAY哪个收益率略有不同.
这是我用的.非常简单
$sth = $dbh->prepare(qq(SELECT * FROM people WHERE updatestatus + INTERVAL 30 DAY <= NOW() )) or die $DBI::errstr;
Run Code Online (Sandbox Code Playgroud)