如果我需要选择过去一个月的数据库,这是正确的方法吗?
$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上个月的表格?
答案 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)
使用
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
上有索引。