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


175

进行以下操作的最佳方法是什么:

SELECT * FROM users WHERE created >= today;

注意:创建的是日期时间字段。

Answers:


328
SELECT * FROM users WHERE created >= CURDATE();

但是我想你是说 created < today


11
CURDATE()只返回日期而不返回时间
Shakti Singh

20
@ n00b您如何拥有将来创建的用户?有趣=)我正在使用它来查看帖子是否已过期。
Garet Claborn 2014年

75
SELECT * FROM myTable WHERE  DATE(myDate) = DATE(NOW())

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


6
也许我缺少了一些东西,但是对于DATETIME类型,CURDATE()解决方案不起作用。确实如此。
Jahmic

加上这会花费很多时间,因为存在通过DATE()函数将DATETIME转换为日期然后与where条件进行比较的开销。
roopunk 2014年

不要在列上使用函数,它会使查询忽略索引,从而导致查询缓慢。检查我的替代方法的答案stackoverflow.com/a/42365426/4311336
Bsienn

33
SELECT * FROM users WHERE created >= NOW();

如果列是日期时间类型。


1
我的意思是今天不是现在:D我今天需要像2011-03-03而不是2011-03-03 14:02:02
n00b

@ n00b:它将返回比今天更大的行,不用担心是否包含时间
Shakti Singh

3
可以说是2011-02-02 14:02:02-在10:02:02创建的用户即使在“今天”创建的情况下也不会返回您的版本:)
n00b

@ n00b:大声笑,如果只允许我们停止时间,就不会有用户返回。
Mike Purcell

15

如果“创建”为日期时间类型

SELECT * FROM users WHERE created < DATE_ADD(CURDATE(), INTERVAL 1 DAY);

CURDATE()也表示“ 2013-05-09 00:00:00”


谢谢你 我实际上需要DATE_SUB(以相同的方式使用),但这使我走上了正确的道路。
丹尼尔·普赖斯

这不会返回日期中的时间为0的数据,即'2013-05-09 00:00:00'将被遗漏
Bsienn

8

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

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

SELECT * FROM users WHERE created >= CURRENT_TIMESTAMP;

5

如果该列具有索引并且对该列应用了函数,则索引将不起作用,并且会进行全表扫描,从而导致查询速度非常慢。

要使用索引并将日期时间与今天/当前日期进行比较,可以使用以下内容。

OP解决方案:

select * from users
where created > CONCAT(CURDATE(), ' 23:59:59')

样本以获取今天的数据:

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

或简称为BETWEEN

select * from users 
where created BETWEEN 
      CONCAT(CURDATE(), ' 00:00:00') AND CONCAT(CURDATE(), ' 23:59:59')

2
SELECT * FROM users WHERE created >= now()

从今天开始,这将不会返回记录。
gsziszi

0

下面的代码为我工作。

declare @Today date

Set @Today=getdate() --date will equal today    

Select *

FROM table_name
WHERE created <= @Today

-1
SELECT * FROM table_name WHERE CONCAT( SUBSTRING(json_date, 11, 4 ) ,  '-', SUBSTRING( json_date, 7, 2 ) ,  '-', SUBSTRING(json_date, 3, 2 ) ) >= NOW();

json_date [“ 05/11/2011”]


这是一个非常原始的解决方案
IgniteCoders 2015年

-5

您可以返回所有行,然后在if语句内使用php datediff函数,尽管这样做会给服务器带来额外的负担。

if(dateDiff(date("Y/m/d"), $row['date']) <=0 ){    
}else{    
echo " info here";    
}

4
与数据库选择相比,这非常慢
IgniteCoders 2015年
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.