繁体   English   中英

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

[英]How do I query between two dates using MySQL?

以下查询:

SELECT * FROM `objects` 
WHERE (date_field BETWEEN '2010-09-29 10:15:55' AND '2010-01-30 14: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')

您的查询日期应为

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

试试

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

date_fielddatetime类型吗? 此外,您还需要先输入早期日期。

应该是:

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

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

SELECT * FROM table_name WHERE DATE(date_field) BETWEEN '2016-12-01' AND '2016-12-10';

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

如果要比较的字段来自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')

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

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

使用日期时间值时,您必须将字段转换为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))

只需将 date_field 投射为日期

SELECT * FROM `objects` 
WHERE (cast(date_field as date) BETWEEN '2010-09-29' AND 
'2010-01-30' )

可能是服务器端或客户端的日期配置问题。 当主机以西班牙语、法语或其他语言配置时,我发现这是多个数据库上的常见问题......这可能会影响格式 dd/mm/yyyy 或 mm/dd/yyyy。

尝试切换日期:

2010-09-29 > 2010-01-30?

我花了将近 2 个多小时的时间搜索并尝试只显示 2 个特定日期之间的帖子,例如:

一个场合从 (04-12) 开始并在 (04-14) 结束而不选择查询中的年份以使其每年在指定日期重复出现,所以我的目标是在开始日期显示该场合并在结束日期自动隐藏它如下:

$stmt = $db->query(
"SELECT *, 
FROM table 

WHERE (CAST(CURDATE() AS date) 

BETWEEN 

CAST(table.date_start AS date) 
AND 
CAST(table.date_end AS date)) 

LIMIT 1"
);

现在,场合仅在这些指定日期之间开始和消失,而不是之后或之前。 希望对大家有帮助,非常感谢:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM