MySQL选择日期等于今天的日期时间字段

Posted

技术标签:

【中文标题】MySQL选择日期等于今天的日期时间字段【英文标题】:MySQL select datetime field where date equals today 【发布时间】: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 【参考方案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

【讨论】:

以上是关于MySQL选择日期等于今天的日期时间字段的主要内容,如果未能解决你的问题,请参考以下文章

选择空的 mysql 日期时间字段

点击日期字段时如何调出日期选择器?

从日期时间字段Mysql查询中获取日期

如何从 MySQL 的 DATETIME 字段中仅选择日期?

MySQL 如何从今天记录的表中选择数据?

数据库的日期类型字段该如何选择