【问题标题】:Need to get records from MySQL database by date only from a datetime field只需要从日期时间字段按日期从 MySQL 数据库中获取记录
【发布时间】:2009-03-27 00:06:59
【问题描述】:

这看起来很简单,但一直让我头疼。我的事件表中有一个名为“date_time”的列,它的类型是日期时间。

我需要编写一个按天获取事件的查询。

表格示例

============================
| id |      date_time      |
============================
| 5  | 2009-03-27 14:16:00 |
============================

现在我需要获取 ID = 5 的事件,但我只有一个日期(unix 时间戳)可以使用。我尝试了很多方法,例如转换为 mysql 格式并在 2009-03-27 00:00:00 和 2009-03-28 00:00:00 之间进行选择,但我无法让它工作。

最好的方法是什么?

非常感谢。

【问题讨论】:

    标签: mysql datetime


    【解决方案1】:
    SELECT * FROM table
    WHERE date_time BETWEEN '2009-03-27 00:00:00' AND '2009-03-27 23:59:59'
    

    应该这样做。

    或者,试试这个:

    SELECT * FROM table WHERE DATE(date_time) = '2009-03-27'
    

    DATE() 函数提取日期时间列的日期部分。

    【讨论】:

    • DATE() 函数方法可能会强制进行表扫描。
    • 我选择了你的第二个例子。谢谢:)
    【解决方案2】:
    select * from table WHERE date(date_time) = '2009-03-27' works for me
    

    如果你有 unix 时间戳,你也可以这样做

    select * from table WHERE UNIX_TIMESTAMP(date_time) = your_timestamp
    

    【讨论】:

    • 您的 UNIX_TIMEESTAMP 方法不起作用,因为 UNIX_TIMESTAMP 是秒。
    【解决方案3】:

    如果时间戳包含小数秒,则 BETWEEN 不安全。这总是安全的:

    SELECT *
    FROM table
    WHERE date_time >= '2009-03-26 00:00:00' AND date_time < '2009-03-27 00:00:00'
    

    【讨论】:

      猜你喜欢
      • 2019-08-23
      • 2011-05-30
      • 1970-01-01
      • 2021-11-19
      • 2016-09-08
      • 1970-01-01
      • 1970-01-01
      • 2012-11-20
      • 2016-12-30
      相关资源
      最近更新 更多