mySQL dateTime范围查询问题

时间:2012-03-30 00:58:24

标签: mysql datetime

我有一个简单的问题。我有一个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日到今天。我在这里错过了什么吗?为什么它可以单独工作,但是当我添加第二个日期时呢?我可能会忽略一些东西。

3 个答案:

答案 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';