下面最好的方法是什么:
SELECT * FROM users WHERE created >= today;
注意:created是一个datetime字段。
下面最好的方法是什么:
SELECT * FROM users WHERE created >= today;
注意:created是一个datetime字段。
当前回答
如果列有索引,并且在列上应用了一个函数,那么索引将不起作用,并发生全表扫描,导致查询非常慢。
糟糕的查询;这将忽略date_time列上的index
select * from users
where Date(date_time) > '2010-10-10'
要在datetime类型创建的列上使用与今天/当前日期相比的索引,可以使用以下方法。
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')
提示: 如果您必须对日期和时间进行大量计算或查询,那么将日期和时间保存在单独的列中是非常有用的。(分而治之)
其他回答
有标记的答案会误导人。问题是DateTime,但所需要的只是CURDATE()。
最简短而正确的回答是:
SELECT * FROM users WHERE created >= CURRENT_TIMESTAMP;
如果列有索引,并且在列上应用了一个函数,那么索引将不起作用,并发生全表扫描,导致查询非常慢。
糟糕的查询;这将忽略date_time列上的index
select * from users
where Date(date_time) > '2010-10-10'
要在datetime类型创建的列上使用与今天/当前日期相比的索引,可以使用以下方法。
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')
提示: 如果您必须对日期和时间进行大量计算或查询,那么将日期和时间保存在单独的列中是非常有用的。(分而治之)
SELECT * FROM myTable WHERE DATE(myDate) = DATE(NOW())
阅读更多: http://www.tomjepson.co.uk/tutorials/36/mysql-select-where-date-today.html
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”)
下面的代码适合我。
declare @Today date
Set @Today=getdate() --date will equal today
Select *
FROM table_name
WHERE created <= @Today