如何使用MySQL在两个日期之间查询?

Nul*_*uli 210 mysql sql

以下查询:

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

没有回报.

我应该有足够的数据来使查询工作.我究竟做错了什么?

Dan*_*uis 435

您的第二个日期是在您的第一个日期之前(即您在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')
Run Code Online (Sandbox Code Playgroud)

  • @IngusGraholskis:`where`子句在`select`或`update`语句中的作用相同. (3认同)

Nik*_*Nik 22

您的查询应该具有日期

select * from table between `lowerdate` and `upperdate`
Run Code Online (Sandbox Code Playgroud)

尝试

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


Roc*_*mat 17

date_field类型datetime?您还需要先将预告片日期.

它应该是:

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


sab*_*bin 13

DATE()是一个MySQL函数,它只提取日期或日期/时间表达式的日期部分

SELECT * FROM table_name WHERE DATE(date_field) BETWEEN '2016-12-01' AND '2016-12-10';
Run Code Online (Sandbox Code Playgroud)


ltl*_*Boy 6

作为@sabin答案的扩展和一个提示,如果只想比较日期部分(没有时间):

如果要比较的字段来自类型日期时间,并且仅指定日期进行比较,则这些日期将在内部转换为日期时间值.这意味着以下查询

SELECT * FROM `objects` WHERE (date_time_field BETWEEN '2010-01-30' AND '2010-09-29')
Run Code Online (Sandbox Code Playgroud)

将被转换为

SELECT * FROM `objects` WHERE (date_time_field BETWEEN '2010-01-30 00:00:00' AND '2010-09-29 00:00:00')
Run Code Online (Sandbox Code Playgroud)

内部.

这反过来导致结果不包括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')
Run Code Online (Sandbox Code Playgroud)


小智 6

您可以通过与大于或等于和小于或等于进行比较来手动执行此操作。

 select * from table_name where created_at_column  >=   lower_date  and  created_at_column <= upper_date;
Run Code Online (Sandbox Code Playgroud)

在我们的示例中,我们需要每天检索特定日期的数据。我们将从一天的开始与另一天的最新一秒进行比较。

  select * from table_name where created_at_column  >=   '2018-09-01 00:00:00'  and  created_at_column <= '2018-09-05 23:59:59';
Run Code Online (Sandbox Code Playgroud)