我有一个类型为“datetime”的列,其值如2009-10-20 10:00:00

我想从datetime中提取date并写一个查询:

SELECT * FROM 
data 
WHERE datetime = '2009-10-20' 
ORDER BY datetime DESC

以下是最好的方法吗?

SELECT * FROM 
data 
WHERE datetime BETWEEN('2009-10-20 00:00:00' AND '2009-10-20 23:59:59')
ORDER BY datetime DESC

然而,这将返回一个空结果集。有什么建议吗?


当前回答

你可以使用MySQL的DATE()函数:

WHERE DATE(datetime) = '2009-10-20'

你也可以试试这个:

哪里的日期时间像“2009-10-20%”

有关使用LIKE的性能影响的信息,请参阅这个答案。

其他回答

在语句中使用LIKE是最好的选择 哪里的日期时间像“2009-10-20%” 在这种情况下应该是成立的

我在一个大型记录集上尝试了date(tscreated) = '2022-06-04'。我的tscreated被索引了。只用了42秒。

然后我尝试了tscreated >= '2022-06-04'和tscreated < '2022-06-05',时间是0.094秒。

我意识到记录集第二次可能在内存中,但我也相信日期函数会对索引的值求反。

您可以将datetime格式化为Y-M-D部分:

DATE_FORMAT(datetime, '%Y-%m-%d')

简单和最好的方式使用日期函数

例子

SELECT * FROM 
data 
WHERE date(datetime) = '2009-10-20' 

OR

SELECT * FROM 
data 
WHERE date(datetime ) >=   '2009-10-20'  && date(datetime )  <= '2009-10-20'

你可以使用MySQL的DATE()函数:

WHERE DATE(datetime) = '2009-10-20'

你也可以试试这个:

哪里的日期时间像“2009-10-20%”

有关使用LIKE的性能影响的信息,请参阅这个答案。