如何在MySQL中将时间戳日期与仅日期参数进行比较?

Mic*_*ael 72 mysql datetime date

在SQL语句中,如何将保存为TIMESTAMP的日期与YYYY-MM-DD格式的日期进行比较?

例: SELECT * FROM table WHERE timestamp = '2012-05-05'

我希望此查询返回指定日期中具有时间戳的所有行,但它仅返回具有午夜时间戳的行.

谢谢

Mar*_*ams 120

您可以使用该DATE()函数来提取时间戳的日期部分:

SELECT * FROM table
WHERE DATE(timestamp) = '2012-05-05'
Run Code Online (Sandbox Code Playgroud)

但是,如果在timestamp列上有索引,这会更快,因为它可以使用索引:

SELECT * FROM table
WHERE timestamp BETWEEN '2012-05-05 00:00:00' AND '2012-05-05 23:59:59'
Run Code Online (Sandbox Code Playgroud)

  • 通过我刚进行的一项小测试,我发现使用BETWEEN的速度快十倍,仅供参考 (2认同)

小智 9

正如某些人所建议的那样,通过使用DATE(timestamp)您正在对列进行操作,因此您不能依赖索引排序。

但是,使用 BETWEEN只有在包含毫秒的情况下才会可靠。在示例时间戳中,BETWEEN '2012-05-05 00:00:00' AND '2012-05-05 23:59:59'您排除了时间戳介于2012-05-05 23:59:59.001和之间的记录2012-05-05 23:59:59.999。然而,由于数据类型的精度,即使这种方法也有一些问题。有时会四舍五入 999 毫秒。

最好的做法是:

SELECT * FROM table
WHERE date>='2012-05-05' AND date<'2012-05-06'
Run Code Online (Sandbox Code Playgroud)


jue*_*n d 6

 WHERE cast(timestamp as date) = '2012-05-05'
Run Code Online (Sandbox Code Playgroud)


Cfr*_*eak 5

SELECT * FROM table WHERE timestamp >= '2012-05-05 00:00:00' 
    AND timestamp <= '2012-05-05 23:59:59'
Run Code Online (Sandbox Code Playgroud)