mySQL dateTime范围查询问题

Myy*_*Myy 30 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);
Run Code Online (Sandbox Code Playgroud)

如果我只是用

SELECT * FROM util_audit WHERE DATED >= DATE(03/15/2012); 
Run Code Online (Sandbox Code Playgroud)

它将返回我的所有记录,因为它们本周已经过时了.

我也试过这个:

SELECT * FROM util_audit WHERE DATED >= '02/15/2012 00:00:00' AND DATED <= '03/31/2012 00:00:00';
Run Code Online (Sandbox Code Playgroud)

没别的了!它将返回零行,当我知道我所有这些都是从本月27日到今天.我在这里错过了什么吗?为什么它自己工作,但是当我添加第二个日期时呢?我可能忽略了一些东西.

小智 51

尝试:

SELECT * FROM util_audit WHERE `DATED` BETWEEN "2012-03-15" AND "2012-03-31";
Run Code Online (Sandbox Code Playgroud)

  • 当你有更多的搜索条件时会发生什么(例如SELECT*FROM util_audit WHERE`DATED` BETWEEN"2012-03-15"AND"2012-03-31"AND booLive = 1)?因为我得到错误. (3认同)

Jam*_*s F 14

如果没有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';
Run Code Online (Sandbox Code Playgroud)

或者你可以推进结束日期并使用:

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';
Run Code Online (Sandbox Code Playgroud)

刚刚遇到这个,所以希望如果其他人找到这个页面会有所帮助.


Eze*_*uns 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';
Run Code Online (Sandbox Code Playgroud)

甚至更好:

SELECT * FROM util_audit 
WHERE DATED BETWEEN '2012-02-15 00:00:00' AND '2012-03-31 00:00:00';
Run Code Online (Sandbox Code Playgroud)