【问题标题】:MySQL: Select all data between range of two datesMySQL:选择两个日期范围内的所有数据
【发布时间】: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 我很确定。

标签: php mysql sql


【解决方案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】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-17
      相关资源
      最近更新 更多