MySQL选择日期等于今天


96

我正在尝试运行一个mysql select语句,该语句将查找今天的日期,并且仅返回在当天注册的结果。我目前已经尝试了以下方法,但是它似乎不起作用。

SELECT users.id, DATE_FORMAT(users.signup_date, '%Y-%m-%d') 
    FROM users 
    WHERE users.signup_date = CURDATE()

SELECT谢谢大家,我已经修改了此声明。

SELECT id FROM users WHERE DATE(signup_date) = CURDATE()


似乎signup_date是日期时间字段
Sergii Stotskyi 2012年

@Serjio是的,当前是日期时间字段。
Jako 2012年

signup_date如果它包含时间的数据类型是什么,那么您将要在WHERE子句中使用date_format 剥离时间以匹配CURDATE()
Taryn

@bluefeet谢谢,我已经修改了我的脚本。似乎有效,但是没有结果。mysql_num_rows不显示0。只是一个空白。
Jako 2012年

Answers:


197
SELECT users.id, DATE_FORMAT(users.signup_date, '%Y-%m-%d') 
FROM users 
WHERE DATE(signup_date) = CURDATE()

即使字段的类型为Date,也有必要使用DATE()吗?
rashidnk

2
@rashidnk不。尽管他在问题中并未明确说出,但该字段显然是type DATETIME
Barmar 2015年

2
尽管此解决方案绝对正确,但它无法很好地扩展(signup_date即使存在这样的索引,也无法在上使用索引)。选择Serjio的解决方案
RandomSeed

或者是否要在特定日期查找,索引也被使用```SELECT users.id,DATE_FORMAT(users.signup_date,'%Y-%m-%d')FROM signup_date> ='2017-08'的用户-30 00:00:00'和signup_date <='2017-08-30 23:59:59'; ```
Sumit M Asok

3
@SumitMAsok最好使用< '2017-08-31 00:00:00'毫秒级的MySQL版本。
Barmar

29

如果signup_date字段中有此查询,它将使用索引

SELECT users.id, DATE_FORMAT(users.signup_date, '%Y-%m-%d') 
    FROM users 
    WHERE signup_date >= CURDATE() && signup_date < (CURDATE() + INTERVAL 1 DAY)

对这个答案的否决是荒谬的。实际上,这是首选方法,因为signup_date与其他方法不同,此查询将能够利用上的索引。
2015年

2
@RandomSeed signup_date两次之间进行测试的一般想法是正确的,但时间不正确。它应该是之间00:00以及23:59:59当前日期。
Barmar 2015年

好吧,日期间隔也是错误的>。<投票率毕竟不是那么荒谬。
RandomSeed 2015年

该查询的性能更高(由于索引)。该WHERE DATE(signup_date) = CURDATE()把我的服务器〜50毫秒,这一个在这里0.8毫秒。
Kai Noack

13

听起来您需要将格式添加到WHERE

SELECT users.id, DATE_FORMAT(users.signup_date, '%Y-%m-%d') 
FROM users 
WHERE DATE_FORMAT(users.signup_date, '%Y-%m-%d') = CURDATE()

参见带有演示的SQL Fiddle


1

您可以在一天中的整个时间使用CONCATwith CURDATE(),然后使用BETWEENin WHERE条件进行过滤:

SELECT users.id, DATE_FORMAT(users.signup_date, '%Y-%m-%d') 
FROM users 
WHERE (users.signup_date BETWEEN CONCAT(CURDATE(), ' 00:00:00') AND CONCAT(CURDATE(), ' 23:59:59'))
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.