【问题标题】:How to compare datetime object as date object如何将日期时间对象与日期对象进行比较
【发布时间】:2014-02-12 05:41:32
【问题描述】:

我有一个包含日期时间列的表格

我的桌子是

ID time
1  2014-01-30 12:00:00
2  2014-01-30 13:00:00
3  2014-02-01 14:00:00

我有 Datetime 对象

2014-01-30 15:00:00

我想选择与 Datetime 对象具有相同“日期”的行。

所以在这种情况下。

我想取第 1 行和第 2 行

我不确定如何将日期时间转换为日期对象并比较 mysql 中的“日期”

我该怎么做?

【问题讨论】:

  • 你要sql还是php解决方案?

标签: php mysql sql datetime select


【解决方案1】:

select * from yourTable where time >= '2014-01-30' and time

您可以使用 MYSQL 提供的 Date() 函数,但它会增加查询的开销

详情请见http://willem.stuursma.name/2009/01/09/mysql-performance-with-date-functions/

【讨论】:

    【解决方案2】:

    使用DATE函数转换date中的datetime对象

    SELECT * 
    FROM tableA a 
    WHERE DATE(a.time) = DATE('2014-01-30 15:00:00');
    

    【讨论】:

    • datetime 对象和 date 有什么区别。根据 op 的问题,它们看起来都像是简单的时间戳?
    • 请注意,虽然这很简单且有效,但它很可能会忽略 a.time 上的任何索引。
    【解决方案3】:

    $date 是 DateTime 对象 由于您有一个 DateTime object,因此您应该在查询中使用它之前对其进行转换。

    $dateYMD = $date->format('Y-m-d');
    mysql_query("SELECT * FROM `table` WHERE DATE(`time`) = '$dateYMD'");
    

    【讨论】:

      【解决方案4】:

      这样会更好,因为查询可以使用索引:

      SELECT *
      FROM date_table
      WHERE date_column >= '2014-01-30' AND date_column < '2014-01-30' + INTERVAL 1 DAY
      

      使用 PHP 函数格式化日期字符串,使其不包含时间,如下所示:

      DateTime::createFromFormat("Y-m-d H:i:s", "2014-01-30 15:00:00")->format("Y-m-d");
      

      【讨论】:

        猜你喜欢
        • 2017-07-02
        • 2021-11-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-02
        • 2018-07-22
        相关资源
        最近更新 更多