MySQL:选择两个日期范围内的所有数据

Posted

技术标签:

【中文标题】MySQL:选择两个日期范围内的所有数据【英文标题】:MySQL: Select all data between range of two dates 【发布时间】:2014-04-17 09:20:58 【问题描述】:

如何进行查询以选择两个日期之间的所有内容。

SELECT * FROM applications WHERE `datum` >='2013-11%' AND `datum`<='2014-04%';

我试图做类似的事情,但只返回一条记录是行不通的。 有人可以告诉我如何让它显示两个日期范围之间的所有内容。

Datum 的类型是 Datetime。 喜欢 2013-11-02 12:21:00

【问题讨论】:

datum 的数据类型是什么? 另外,您确定数据库中有多个条目应符合这些条件吗? 日期时间格式,例如2013-11-02 12:21:00 第 1 步是确保使用正确的日期时间字段,第 2 步是不要尝试应用用于 LIKE 的'%' .. @Helpful 我很确定。 【参考方案1】:

使用between 语句,例如:

SELECT * FROM applications WHERE datum BETWEEN '2013-11-01' AND '2014-04-01';

您在查询中使用了通配符,所以只要弄清楚您想使用什么日期,您就可以摇滚乐了。

【讨论】:

实际上,OP 似乎想要整个四月,而不仅仅是第一天。此外,假设它是日期时间或时间戳列,您实际上只是得到“2014-04-01 00:00:00”,而不是一整天。 这只是给我一个记录。我知道怎么了。 SELECT * FROM applications WHERE datum BETWEEN '2013-11-01 00:00:00' AND '2014-04-01 00:00:00'; 你确定你确实有不止一排吗? 尼尔,谢谢它现在可以正常工作了,我输入了错误的结束日期。 :p【参考方案2】:

% 用于 like 搜索,适用于 (var)char 和 text 列。

SELECT * FROM applications WHERE `datum` >='2013-11-01' AND `datum`<='2014-04-31 23:59:59';

mysql 中,使用 31 作为一个月的上限是安全的,即使是 2 月也是如此。

【讨论】:

为什么不只是&lt; '2015-05-01'?无论如何,我认为考虑时间也很重要,如图所示(所以 +1)。 好吧,如果用户指定了一个给定的日期,不一定是月底,你的代码中是否有一些逻辑可以转换用户给出的日期,这样你就可以更方便地编写你的sql查询?我不这么认为...【参考方案3】:

试试这个:

.. WHERE datum >= '2012-01-01' AND datum <= '2012-12-31'

http://www.sqlfiddle.com/#!2/4b43b/2

【讨论】:

用 sqlfiddle 检查我的答案【参考方案4】:

试试这个

$query="SELECT * FROM applications WHERE `datum` between '2013-11-01' AND '2014-04-01'";

$query="SELECT * FROM applications WHERE `datum` WHERE  `datum` >=  '2013-11-01' and  `datum` <=  '2014-04-01' ";

两者都在工作

【讨论】:

【参考方案5】:

非常感谢,它现在可以工作了,我使用了错误的结束日期。

【讨论】:

以上是关于MySQL:选择两个日期范围内的所有数据的主要内容,如果未能解决你的问题,请参考以下文章

Mysql生成任意指定两时间范围内的日期列表

在python中生成给定范围内的所有日期

SQLite 按选定日期范围内的所有日期分组,即使数据不存在

SQL选择所有日期范围都存在的特定列

sql 查询指定用户ID在指定日期范围内的所有数据

s-s-rS 未显示日期范围内的所有数据