查询:
SELECT * FROM `objects`
WHERE (date_field BETWEEN '2010-09-29 10:15:55' AND '2010-01-30 14:15:55')
返回什么。
我应该有足够多的数据让查询工作。我做错了什么?
查询:
SELECT * FROM `objects`
WHERE (date_field BETWEEN '2010-09-29 10:15:55' AND '2010-01-30 14:15:55')
返回什么。
我应该有足够多的数据让查询工作。我做错了什么?
当前回答
试着换个日期:
2010-09-29 > 2010-01-30?
其他回答
仅仅将date_field转换为date
SELECT * FROM `objects`
WHERE (cast(date_field as date) BETWEEN '2010-09-29' AND
'2010-01-30' )
作为对@sabin的回答的延伸,如果有人想只比较日期部分(不比较时间),这是一个提示:
如果要比较的字段来自datetime类型,并且只指定了用于比较的日期,那么这些日期将在内部转换为datetime值。这意味着下面的查询
SELECT * FROM `objects` WHERE (date_time_field BETWEEN '2010-01-30' AND '2010-09-29')
将被转换为
SELECT * FROM `objects` WHERE (date_time_field BETWEEN '2010-01-30 00:00:00' AND '2010-09-29 00:00:00')
在内部。
这将导致结果不包括2010-09-29时间值大于00:00:00的对象!
因此,如果所有日期为2010-09-29的对象也应该包括在内,则要比较的字段必须转换为日期:
SELECT * FROM `objects` WHERE (DATE(date_time_field) BETWEEN '2010-01-30' AND '2010-09-29')
我刚刚在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
date_field是datetime类型吗?此外,你还需要把较早的日期放在前面。
它应该是:
SELECT * FROM `objects`
WHERE (date_field BETWEEN '2010-01-30 14:15:55' AND '2010-09-29 10:15:55')
第二次约会要在第一次约会之前。您是在2010年9月29日至2010年1月30日之间查询的)。试着颠倒一下日期的顺序:
SELECT *
FROM `objects`
WHERE (date_field BETWEEN '2010-01-30 14:15:55' AND '2010-09-29 10:15:55')