【问题标题】:How to get data from a specific date in sql如何从sql中的特定日期获取数据
【发布时间】:2018-06-11 01:05:23
【问题描述】:

我正在尝试在 MySQL 中获取 当前日期数据。我有一个名为 created_at 的列,它使用语句存储日期和时间(2017-12-31 11:32:54)使用 NOW() 函数,

    $stmt = $this->conn->prepare("INSERT INTO log(id, name, created_at) VALUES(?, ?, NOW())");
    $stmt->bind_param("ss", $id, $name);
    $result = $stmt->execute();

现在我想忽略created_at列中的时间,取回当前日期(今天的日期)的数据。

我尝试使用此查询,

SELECT * FROM log WHERE created_at = DATE_SUB(CURDATE(), INTERVAL 0 DAY)

但这会导致zero rows selected

请帮我解决这个问题。

【问题讨论】:

    标签: php mysql datetime


    【解决方案1】:

    一种选择是将created_at 包装成DATE(),然后与CURDATE() 进行比较:

    SELECT *
    FROM log
    WHERE DATE(created_at) = CURDATE();
    

    但这样做的缺点是排除了在created_at 列上使用索引的可能性。我们也可以这样表述:

    SELECT *
    FROM log
    WHERE created_at >= CURDATE() AND created_at < CURDATE() + INTERVAL 1 DAY;
    

    这将允许在created_at 上使用索引,尽管它有点冗长。

    【讨论】:

    • 谢谢,它可以工作,但是使用索引是什么意思?
    • @VishistVVishy 如果您在created_at 列上有一个索引,如果您有类似DATE(created_at) 的内容,即如果您将它包装在一个函数中,它将无法在查询中使用。我的第二个查询解决了这个潜在的问题。
    【解决方案2】:

    这也行

    SELECT *
    FROM log
    WHERE  DATE(created_at, '%Y-%m-%d')  = CURDATE();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多