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)
小智 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)
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)