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选择日期等于今天的日期时间字段的主要内容,如果未能解决你的问题,请参考以下文章