MySQL中的日期时间等于或大于今天

n00*_*00b 163 mysql sql datetime

最好的方法是:

SELECT * FROM users WHERE created >= today;
Run Code Online (Sandbox Code Playgroud)

注意:created是一个日期时间字段.

Clo*_*eto 306

SELECT * FROM users WHERE created >= CURDATE();
Run Code Online (Sandbox Code Playgroud)

但我认为你的意思 created < today

  • @ n00b你如何拥有将来创建的用户..?有趣的=)我用它来查看帖子是否已过期. (19认同)
  • `CURDATE()`只返回日期而不是时间 (10认同)
  • 不,我的意思> =但是谢谢CURDATE()是我需要的! (4认同)

Edm*_*mhs 72

SELECT * FROM myTable WHERE  DATE(myDate) = DATE(NOW())
Run Code Online (Sandbox Code Playgroud)

阅读更多:http: //www.tomjepson.co.uk/tutorials/36/mysql-select-where-date-today.html

  • 也许我错过了一些东西,但是对于DATETIME类型,CURDATE()解决方案不起作用.这样做. (6认同)

Sha*_*ngh 32

SELECT * FROM users WHERE created >= NOW();
Run Code Online (Sandbox Code Playgroud)

如果列是日期时间类型.

  • 让我们说它是2011-02-02 14:02:02 - 在你的版本中不会返回在10:02:02创建的用户,即使它们是"今天"创建的:) (2认同)

小智 15

如果'created'是日期时间类型

SELECT * FROM users WHERE created < DATE_ADD(CURDATE(), INTERVAL 1 DAY);
Run Code Online (Sandbox Code Playgroud)

CURDATE()也意味着'2013-05-09 00:00:00'


Bsi*_*enn 9

如果该列有索引并且在该列上应用了一个函数,则索引不起作用并且会发生全表扫描,从而导致查询速度非常慢。

错误查询;这将忽略列 date_time 上的索引

select * from users
where Date(date_time) > '2010-10-10'
Run Code Online (Sandbox Code Playgroud)

利用关于列索引创建类型的日期时间与当今/当前日期进行比较,可以使用下面的方法。

OP的解决方案:

select * from users
where created > CONCAT(CURDATE(), ' 23:59:59')
Run Code Online (Sandbox Code Playgroud)

获取今天数据的示例:

select * from users
where 
    created >= CONCAT(CURDATE(), ' 00:00:00') AND
    created <= CONCAT(CURDATE(), ' 23:59:59')
Run Code Online (Sandbox Code Playgroud)

或使用 BETWEEN 简称

select * from users 
where created BETWEEN 
      CONCAT(CURDATE(), ' 00:00:00') AND CONCAT(CURDATE(), ' 23:59:59')
Run Code Online (Sandbox Code Playgroud)

提示: 如果您必须对日期和时间进行大量计算或查询,那么将日期和时间保存在单独的列中非常有用。(分而治之)


Jef*_*Man 5

标有答案的答案具有误导性。所陈述的问题是DateTime,但所陈述的只是正义CURDATE()

最短的和正确答案的情况是:

SELECT * FROM users WHERE created >= CURRENT_TIMESTAMP;
Run Code Online (Sandbox Code Playgroud)