【问题标题】:MySQL Filter Query by Date RangeMySQL 按日期范围过滤查询
【发布时间】:2015-10-21 14:34:45
【问题描述】:

我想创建一个查询,使用日期范围过滤表中的记录

  • 该表有一个“日期”列,格式为 MM/DD/YYYY。

我有这个现有的函数,可以自动按“类型”过滤记录,但是如何将参数附加到这个使用日期范围以仅显示该范围内的记录的函数?

例如,查找介于 04/01/2015 和 04/30/2015 之间的记录。

public function getByType() {

    $query = $this->pdo->prepare("SELECT * FROM `" . $this->table . "` WHERE type='hod'");
    $query->execute();

      if ($query->rowCount() == 0) return null;

}

谢谢!

【问题讨论】:

  • MySQL 将 DATE 类型存储为 YYYY-mm-dd

标签: php mysql


【解决方案1】:

您使用错误的数据类型存储日期。将日期存储为 varchar 字符串就像在您的应用程序中招来邪恶。您应该始终使用 mysql 原生日期数据类型 date,datetime,timestamp 等存储日期,日期为 Y-m-d 格式

但是在当前情况下,您可以使用str_to_date 函数来完成工作,但从长远来看,您应该考虑纠正这些问题。

那么它是如何工作的

mysql> select str_to_date('04/01/2015','%m/%d/%Y') as d ;
+------------+
| d          |
+------------+
| 2015-04-01 |
+------------+

所以你可以使用的查询

SELECT * FROM table_name 
WHERE 
type='hod' 
and str_to_date(date,'%m/%d/%Y') between str_to_date('04/01/2015','%m/%d/%Y') 
and str_to_date('04/30/2015','%m/%d/%Y') 

【讨论】:

  • 非常感谢!像魅力一样工作。我将更新数据库中的日期以使用 MySQL 日期类型。
猜你喜欢
  • 1970-01-01
  • 2011-05-25
  • 1970-01-01
  • 2017-04-17
  • 2013-08-14
  • 1970-01-01
  • 1970-01-01
  • 2022-07-07
  • 1970-01-01
相关资源
最近更新 更多