2012-06-04 145 views
4

尝试这样选择时间戳返回所有或0时间戳

select * from table where timestamp_field between 1330560000 and 1336170420 

select * from table where timestamp_field >=1330560000 and timestamp_field<=1336170420 

两个返回结果为空。

但这

select * from table where timestamp_field >= 1330560000 

返回所有行

为了让事情更荒唐

select * from table where timestamp_field <= 1336170420 

返回结果为空。

当然,还有前存在时间戳值,之间以及之后1336170420 = 4.may 2012和1330560000 = 1.march 2012

时间戳值的确定,至少phpmyadmin的显示正确的(人类可读的)日期时间值。 我通过解析字符串创建时间戳,与

UPDATE table SET timestamp_field = STR_TO_DATE(timestamp_string, '%d.%m.%Y') 

想我失去了一些东西,但无法找到什么!

+1

是否将您的时间戳存储为int或varchar? – Rooster

+0

作为时间戳。猜测它是int – Prvul

+0

尝试使用phpmyadmin中的结构选项卡将类型更改为int,除非您依靠mysql生成当前时间戳,而您并不需要指定时间戳作为数据类型 – Rooster

回答

6

在MySQL中期望date literals,不是整数的:

使用一个整数(假设他们是从unix新纪元秒),第一次使用MySQL的FROM_UNIXTIME()功能将它们转换:

SELECT * 
FROM table 
WHERE timestamp_field BETWEEN FROM_UNIXTIME(1330560000) 
          AND FROM_UNIXTIME(1336170420) 

或者否则使用UNIX_TIMESTAMP()将列转换为其UNIX表示形式:

SELECT * 
FROM table 
WHERE UNIX_TIMESTAMP(timestamp_field) BETWEEN 1330560000 AND 1336170420 
+3

欢迎您在贝尔格莱德附近喝啤酒和烤肉串;)这为我节省了一晚 – Prvul

0

为什么不使用sql代码将date_time(timestamp/1000)作为dateTime进行转换?你尝试过吗?

+0

并不完全了解它。例子将是有用的。我真的试过了解mysql如何处理日期和时间,但没有成功:( – Prvul

+0

ahh eggyal打我,这是我去的地方。 – Fonzy