13个字符长时间戳的SQL语句

时间:2010-07-13 12:05:31

标签: mysql

我有一个封闭的源应用程序,它在MySQL数据库中放置了一个13个字符的长时间戳。例如,一个值是:

1277953190942

现在我遇到了问题,我必须编写一个sql语句,它将返回一个与特殊日期相匹配的表的所有结果。

所以我有例如2010年7月1日,我将获得所有行,时间是在2010年7月1日00:00:00至01. 7月23:59:59之间。

如何编写此sql语句?

select * from myTable where TIMESTAMP = ???

有谁知道这个?

最诚挚的问候。

4 个答案:

答案 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

转换为UNIX时间戳

取决于您是否使用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));
}
?>

但是你可以看到你必须要做的事情