我有一个简单的问题。我有一个db,一个带有datetime列的审计表。 (即2012-03-27 00:00:00)我正在构建一个mySQL查询,如果日期介于我提供的两个日期之间,则返回一组行。
到目前为止,我的查询如下所示:
SELECT * FROM util_audit WHERE DATED >= DATE(03/15/2012) AND DATED <= DATE(03/31/2012);
如果我只是使用
SELECT * FROM util_audit WHERE DATED >= DATE(03/15/2012);
它将返回我的所有记录,因为它们已于本周过时了。
我也试过这个:
SELECT * FROM util_audit WHERE DATED >= '02/15/2012 00:00:00' AND DATED <= '03/31/2012 00:00:00';
什么都没有!它将返回零行,当我知道我所有这些都是从本月27日到今天。我在这里错过了什么吗?为什么它可以单独工作,但是当我添加第二个日期时呢?我可能会忽略一些东西。
答案 0 :(得分:48)
尝试:
SELECT * FROM util_audit WHERE `DATED` BETWEEN "2012-03-15" AND "2012-03-31";
答案 1 :(得分:13)
有一些边缘情况需要通过使用正确的结束日期来捕获,如果不是31日的项目被忽略:
SELECT * FROM util_audit
WHERE DATED >= '2012-02-15 00:00:00' AND DATED <= '2012-03-31 23:59:59';
SELECT * FROM util_audit
WHERE DATED BETWEEN '2012-02-15 00:00:00' AND '2012-03-31 23:59:59';
或者你可以推进结束日期并使用:
SELECT * FROM util_audit
WHERE DATED >= '2012-02-15 00:00:00' AND DATED < '2012-04-01';
SELECT * FROM util_audit
WHERE DATED BETWEEN '2012-02-15 00:00:00' AND '2012-04-01';
我自己也遇到了这个问题,希望如果其他人找到这个页面会有所帮助。
答案 2 :(得分:6)
据我所知,MySql中的日期用yyyy-MM-dd hh:mm:ss
格式表示,因此您需要这样做:
SELECT * FROM util_audit
WHERE DATED >= '2012-02-15 00:00:00' AND DATED <= '2012-03-31 00:00:00';
甚至更好:
SELECT * FROM util_audit
WHERE DATED BETWEEN '2012-02-15 00:00:00' AND '2012-03-31 00:00:00';