查询:

SELECT * FROM `objects` 
WHERE (date_field BETWEEN '2010-09-29 10:15:55' AND '2010-01-30 14:15:55')

返回什么。

我应该有足够多的数据让查询工作。我做错了什么?


当前回答

我刚刚在mariaDB上测试了2个案例,如下:

Case 1: SELECT * FROM table_name WHERE DATE(date_field) BETWEEN '2016-12-01' AND '2016-12-10' // include 2016-12-10
Case 2: SELECT * FROM table_name WHERE (date_field BETWEEN '2016-12-01' AND '2016-12-10') // not include 2016-12-10

其他回答

你可以手动做,通过比较大于或等于和小于或等于。

 select * from table_name where created_at_column  >=   lower_date  and  created_at_column <= upper_date;

在我们的示例中,我们需要检索某一天的数据。 我们将从一天的开始到另一天的最后一秒进行比较。

  select * from table_name where created_at_column  >=   '2018-09-01 00:00:00'  and  created_at_column <= '2018-09-05 23:59:59';

您的查询应该有日期为

select * from table between `lowerdate` and `upperdate`

try

SELECT * FROM `objects` 
WHERE  (date_field BETWEEN '2010-01-30 14:15:55' AND '2010-09-29 10:15:55')

date_field是datetime类型吗?此外,你还需要把较早的日期放在前面。

它应该是:

SELECT * FROM `objects` 
WHERE  (date_field BETWEEN '2010-01-30 14:15:55' AND '2010-09-29 10:15:55')

使用Date和Time值时,必须将字段转换为DateTime而不是Date。 试一试:

SELECT * FROM `objects` 
WHERE (CAST(date_field AS DATETIME) 
BETWEEN CAST('2010-09-29 10:15:55' AS DATETIME) AND CAST('2010-01-30 14:15:55' AS DATETIME))

我刚刚在mariaDB上测试了2个案例,如下:

Case 1: SELECT * FROM table_name WHERE DATE(date_field) BETWEEN '2016-12-01' AND '2016-12-10' // include 2016-12-10
Case 2: SELECT * FROM table_name WHERE (date_field BETWEEN '2016-12-01' AND '2016-12-10') // not include 2016-12-10