【问题标题】:MySQL select datetime field where date equals todayMySQL选择日期等于今天的日期时间字段
【发布时间】:2015-10-28 00:15:49
【问题描述】:

我正在尝试选择日期等于今天的日期时间字段。但是,查询永远不会返回任何行。

我的数据库中有这一行:

id    booked_at
1     2015-08-05 09:10:56

我使用的查询是:

select date(`booked_at`) from `booking_dates` where booked_at = CURDATE();

为什么这不返回上面的行?

【问题讨论】:

  • 例如:SELECT date(booked_at) FROM booking_dates WHERE booked_at BETWEEN CONCAT(CURDATE(),' 00:00:00') AND CONCAT(CURDATE(),' 23:59:59');
  • @V4n1ll4 如果你真的关心性能,你应该使用草莓的查询,因为它的Sargable

标签: php mysql datetime


【解决方案1】:

您必须去掉booked_at 的时间部分,因为2015-08-05 09:10:56 不等于2015-08-05。试试这个:

select date(booked_at) from booking_dates where date(booked_at) = CURDATE();

【讨论】:

  • 是的,但是 date() 函数会这样做。
  • 对于 select 语句,但不在 where 子句中,所以使用 date(booked_at) = curdate()
  • 您必须在 where 条件中包含日期函数。
  • 这种方法的缺点是您不能将索引与作用于列的函数一起使用。但优点是易于阅读。
【解决方案2】:

booked_at 列上使用索引:

SELECT date(booked_at)
FROM booking_dates
WHERE booked_at >= CURDATE()
    AND booked_at < CURDATE() + INTERVAL 1 DAY

【讨论】:

    猜你喜欢
    • 2012-09-22
    • 1970-01-01
    • 2017-08-14
    • 2011-07-08
    • 2012-10-17
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 2014-09-24
    相关资源
    最近更新 更多