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

问题描述 投票:0回答:10

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

SELECT * FROM users WHERE created >= today;

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

mysql sql datetime
10个回答
405
投票
SELECT * FROM users WHERE created >= CURDATE();

但我认为你的意思是

created < today

您可以将日期时间与日期进行比较,例如:

SELECT NOW() < CURDATE()
给出
0
SELECT NOW() = CURDATE()
给出
1


94
投票
SELECT * FROM myTable WHERE  DATE(myDate) = DATE(NOW())

了解更多:https://www.tomjepson.co.uk/mysql-select-from-table-where-date-today


47
投票
SELECT * FROM users WHERE created >= NOW();

如果列是日期时间类型。


31
投票

标记的答案具有误导性。提出的问题是

DateTime
,但指出需要的只是
CURDATE()

对此的最短且正确的答案是:

SELECT * FROM users WHERE created >= CURRENT_TIMESTAMP;

18
投票

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

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

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


15
投票

如果列有索引并且对该列应用了函数,那么索引不起作用并且会发生全表扫描,导致查询非常慢。

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

select * from users
where Date(date_time) > '2010-10-10'

要利用datetime类型的列created上的索引与今天/当前日期进行比较,可以使用以下方法。

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')

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


3
投票
SELECT * FROM users WHERE created >= now()

1
投票

下面的代码对我有用。

declare @Today date

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

Select *

FROM table_name
WHERE created <= @Today

-2
投票
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”]


-6
投票

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

if(dateDiff(date("Y/m/d"), $row['date']) <=0 ){    
}else{    
echo " info here";    
}
© www.soinside.com 2019 - 2024. All rights reserved.