我有一个封闭的源应用程序,它在MySQL数据库中放置了一个13个字符的长时间戳。例如,一个值是:
1277953190942
现在我遇到了问题,我必须编写一个sql语句,它将返回一个与特殊日期相匹配的表的所有结果。
所以我有例如2010年7月1日,我将获得所有行,时间是在2010年7月1日00:00:00至01. 7月23:59:59之间。
如何编写此sql语句?
select * from myTable where TIMESTAMP = ???
有谁知道这个?
最诚挚的问候。
答案 0 :(得分:8)
这是一个Unix timestamp,精度为毫秒,即自Unix epoch以来的毫秒数。因此,正确的陈述将是
select * from myTable where DATE(FROM_UNIXTIME(timestamp / 1000)) = DATE('2010-07-01');
请注意,查询不会很快,表格中的每个值都必须转换为比较日期。一旦此查询开始出现问题(而不是之前的问题),您可能希望使用一个方法,使用2个时间戳作为开始和结束的日期,这不需要太多的转换开销。我会把这作为锻炼留给渴望的人;)
答案 1 :(得分:2)
SELECT * FROM your_table
WHERE DATE( FROM_UNIXTIME( timestamp /1000 ) ) between '2010-07-01 00:00:00' and '2010-07-01 23:59:59'
答案 2 :(得分:1)
请看http://en.wikipedia.org/wiki/Unix_epoch。
此数字可能是自1970年1月1日以来的毫秒数。
答案 3 :(得分:0)
时间戳包含ms:/如果您现在查看时间127 902 676 7
以及时间127 795 319 0 942
,您会看到它包含0942
的最后4个整数即.9ms,您需要将其从epoch
取决于您是否使用PHP,这里有一个小功能
<?php
function EpochToUnix($t)
{
return mktime(substr($t,8,2),substr($t,10,2),ubstr($t,12,2),substr($t,4,2),substr($t,6,2),substr($t,0,4));
}
?>
但是你可以看到你必须要做的事情