在date_sub函数中使用间隔时我们可以使用一个月和日的间隔组合吗?

时间:2012-07-14 23:43:58

标签: php mysql sql

如果我需要选择过去一个月的数据库,这是正确的方法吗?

$month1=mysql_query("select * from users where date_sub(concat(curdate(), ' 00:00:00'), interval 1 month day(curdate()) day) < start and start < date_sub(concat(curdate(), ' 00:00:00'), interval day(curdate()) day)");

此字段是否正确:date_sub(concat(curdate(), ' 00:00:00'), interval 1 month day(curdate()) day)

有没有最好的简短替代品,只需从数据库中选择 JUST上个月的表格?

3 个答案:

答案 0 :(得分:2)

SELECT * FROM users 
   WHERE YEAR(`start`) = YEAR(DATE_SUB(NOW(), INTERVAL 1 MONTH)) 
      AND MONTH(`start`) = MONTH(DATE_SUB(NOW(), INTERVAL 1 MONTH))

编辑:纠正年度状况。

答案 1 :(得分:0)

  • 您不需要连接'00:00:00'
  • 您减去1个月加上一些天数,而不是仅仅1个月。您只能将1个参数传递给间隔。

使用

DATE_SUB(CURDATE(), INTERVAL 1 MONTH)

day()函数实际上为您提供了该月的某一天,因此如果您希望从月初获取所有记录,则可以使用此功能

DATE_SUB(CURDATE(), INTERVAL DAY(CURDATE()) day);

今天是7月15日,所以这将获得从1日到15日的所有记录

答案 2 :(得分:0)

这应该这样做:

SELECT * FROM users WHERE start > DATE_SUB(NOW(), INTERVAL 1 MONTH)

如果您需要2个确切的日期:

SELECT * FROM users WHERE start BETWEEN  '2012-06-01' AND '2012-06-31'

对于无静态请求:

SELECT * FROM users 
WHERE start > DATE_ADD(LAST_DAY(
                            DATE_SUB(NOW(), INTERVAL 2 MONTH
                        )),INTERVAL 1 DAY) 
AND start <= DATE_ADD(LAST_DAY(
                          DATE_SUB(NOW(), INTERVAL 1 MONTH
                      )),INTERVAL 1 DAY) 

确保您在start上有索引。