MySQL选择日期时间字段,其中日期等于今天。

22

我正在尝试选择一个日期时间字段,其中日期等于今天。然而,查询从未返回任何行。

我的数据库中有这一行:

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

我使用的查询是:

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

为什么这个代码不能返回上一行?


3
好的,请告诉我需要翻译的内容。 - Strawberry
1
如果你真的关心性能,你应该使用Strawberry的查询,因为它是Sargable的。 - M Khalid Junaid
2个回答

46
你需要去掉booked_at的时间部分,因为2015-08-05 09:10:56不等于2015-08-05。请尝试以下方法:
select date(booked_at) from booking_dates where date(booked_at) = CURDATE();

是的,但是date()函数可以实现这个功能。 - V4n1ll4
对于SELECT语句,但不在WHERE子句中,因此使用date(booked_at)= curdate()。 - Vladimir_M
你必须在你的where条件中包含日期函数。 - Jan
9
这种方法的缺点是你无法在作用于列的函数中使用索引。但好处是易于阅读。 - Strawberry

9

要在列booked_at上使用索引:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接