我想获取年龄超过60天的所有记录。我有create_date列,请建议一个满足上述要求的查询
SELECT * FROM mytable WHERE create_date BETWEEN DATE_SUB(NOW(), INTERVAL 60 DAY) AND create_date >'60days'
得到了我的查询
正确的查询是
SELECT * FROM mytable WHERE create_date < DATE_SUB(NOW(), INTERVAL 60 DAY);
答案 0 :(得分:2)
在SQL中,表达式
x BETWEEN a AND b
字面意思是
a <= x AND x <= b
如果a > b
,无论如何都会产生空结果。
换句话说,订单确实很重要 - 只需确保在使用x BETWEEN a AND b
时,a
必须为&lt; = b
。
对你而言,它意味着交换日期(并修复其他一些错误):
SELECT * FROM mytable
WHERE create_date BETWEEN '2011-10-14'
AND NOW() - INTERVAL 60 DAY
更新:关于使用函数DATE_SUB()
或DATE_ADD()
的其他说明。
一般情况下,如果您需要比较大表中的日期,您应该不惜一切代价避免使用这些功能!现代MySQL支持使用标准+
和-
运算符的日期算术,因此表达式
DATE_SUB(create_date, INTERVAL 60 DAY)
相当于
create_date - INTERVAL 60 DAY
这不仅更易于阅读,而且还允许服务器利用您为create_date
列创建的可能索引。此加速不能应用于任何函数调用,如DATE_SUB()
- MySQL不支持功能索引。
答案 1 :(得分:0)
尝试类似
的内容select * from tablename where datediff(now(), date) > 60
我假设date
存储在名为date
的列中,您使用的是列名而不是date
。
希望它有效。