【问题标题】:Datetime and SELECT * FROM table WHERE date = TODAY日期时间和 SELECT * FROM table WHERE date = TODAY
【发布时间】:2013-10-22 01:39:47
【问题描述】:

例如,数据库中的列(日期)显示“2013-10-14 14:37:38”。

如何编辑$todaysDate 以显示今天的所有日期?我知道我必须在某处使用 % 但我尝试了很多方法都没有成功。 :/

我的代码如下:

$todaysDate = date("Y-m-d");

$query_today = $db->prepare("SELECT * FROM table WHERE date=:date");
$query_today->bindParam(":date", $todaysDate);
$query_today->execute();

更新 下面没有任何工作。我只想从一个简单的date("Y-m-d") 中选择数据库中的所有日期。如果数据库中的日期是“2013-10-14 14:37:38”,我只想选择 2013-10-14。类似date("Y-m-d%")

【问题讨论】:

  • 在 MySQL 中 DATE(date_field) 不返回没有时间的日期吗?

标签: php mysql sql date pdo


【解决方案1】:

例如,如果您要搜索今天以外的其他日期:

$todaysDate = date("Y-m-d"); # or any other date
$query_today = $db->prepare("SELECT * FROM table WHERE DATE(date) = :date");
$query_today->bindParam(":date", $todaysDate);
$query_today->execute();

示例,仅适用于当前日期:

$query_today = $db->prepare("SELECT * FROM table WHERE DATE(date) = CURDATE()");
$query_today->execute();

附言但就像@ypercube 所说,如果您在日期字段上有索引,他的示例将使用该索引。

$todaysDate = date("Y-m-d");
$query_today = $db->prepare("SELECT * FROM table WHERE date >= :date AND date < DATE_ADD(:date, INTERVAL 1 DAY)");
$query_today->bindParam(":date", $todaysDate);
$query_today->execute();

$query_today = $db->prepare("SELECT * FROM table WHERE date >= CURDATE() AND date < DATE_ADD(CURDATE(), INTERVAL 1 DAY)");
$query_today->execute();

【讨论】:

  • 不太了解索引部分。你想解释一下吗?
【解决方案2】:

无论该列的类型是 DATEDATETIME 还是 TIMESTAMP,这都有效,并且如果有可用的索引,它将使用索引:

WHERE date >= CURRENT_DATE
  AND date < CURRENT_DATE + INTERVAL 1 DAY

【讨论】:

  • OP 只想获取当前日期的记录,而不是下一个日期的记录。
【解决方案3】:

一个简单的

SELECT * FROM table WHERE date = DATE(NOW())

应该足够了。

或者正如阿尔玛指出的那样,

SELECT * FROM table WHERE date = CURDATE()

【讨论】:

  • 为什么要这样做?发现CURDATE()
  • 有效.. 我必须对变量 ($todaysDate) 做些什么吗?
【解决方案4】:

而不是下面的代码:

$query_today = $db->prepare("SELECT * FROM table WHERE date=:date");

使用以下代码:

$query_today = $db->prepare("SELECT * FROM table WHERE DATE_FORMAT(date, '%Y-%m-%d')=:date");

【讨论】:

  • 这不会使用任何索引,会扫描整个表。
  • @ypercube 使用在代码中定义了他/她正在使用当前日期$query_today-&gt;bindParam(":date", $todaysDate) 可能是您不了解 PDO。这是在PDO中绑定参数值的方法。
  • 我说的是DATE_FORMAT('%Y-%m-%d', date) 部分。这将使任何索引的使用无效。
  • 抱歉,我没有看到任何关于允许使用索引的更正。您只更正了语法。
  • @ypercube 其他事情都是正确的,请参见此处:dev.mysql.com/doc/refman/5.0/en/…
【解决方案5】:

$query_today = $db-&gt;prepare("SELECT * FROM table WHERE DATE(date)=DATE(:date)");

【讨论】:

    猜你喜欢
    • 2020-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-06
    • 2021-07-21
    相关资源
    最近更新 更多