MySQL选择日期等于今天

Jak*_*ako 81 mysql

我正在尝试运行一个mysql select语句,它查看今天的日期,只返回当天注册的结果.我目前尝试了以下内容,但它似乎不起作用.

SELECT users.id, DATE_FORMAT(users.signup_date, '%Y-%m-%d') 
    FROM users 
    WHERE users.signup_date = CURDATE()
Run Code Online (Sandbox Code Playgroud)

我已经修改了我的SELECT声明,谢谢你们.

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

Bar*_*mar 169

SELECT users.id, DATE_FORMAT(users.signup_date, '%Y-%m-%d') 
FROM users 
WHERE DATE(signup_date) = CURDATE()
Run Code Online (Sandbox Code Playgroud)

  • @rashidnk没有.虽然他没有在问题中说清楚,但这个领域显然属于"DATETIME"类型. (2认同)
  • 虽然这个解决方案绝对正确,但它不能很好地扩展(不能在`signup_date`上使用索引,即使存在这样的索引).喜欢[Serjio的解决方案](http://stackoverflow.com/a/12677822/1446005). (2认同)
  • @SumitMAsok最好使用`<'2017-08-31 00:00:00'`以防你使用MySQL版本的毫秒. (2认同)

Ser*_*kyi 27

如果您有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)
Run Code Online (Sandbox Code Playgroud)

  • 对这个答案的否决是荒谬的。这实际上是首选方法,因为与其他方法不同,此查询能够利用“signup_date”上的索引。 (2认同)
  • @RandomSeed在两次之间测试`signup_date`的一般想法是正确的,但是时间不正确。当前日期应该在“ 00:00”和“ 23:59:59”之间。 (2认同)
  • @Barmar是的你是对的.我解决了问题. (2认同)

Tar*_*ryn 12

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

SELECT users.id, DATE_FORMAT(users.signup_date, '%Y-%m-%d') 
FROM users 
WHERE DATE_FORMAT(users.signup_date, '%Y-%m-%d') = CURDATE()
Run Code Online (Sandbox Code Playgroud)

请参阅SQL Fiddle with Demo

  • 告别你的表现.此查询从不使用索引 (11认同)