4

试过这个

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.ma 2012. 和 1330560000=1.march 2012 之前、之间和之后都存在时间戳值。

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

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

猜猜我错过了什么,但找不到什么!?

4

2 回答 2

6

MySQL 需要日期文字,而不是整数:

SELECT *
FROM   table
WHERE  DATE(timestamp_field) BETWEEN '2012-03-01' AND '2012-05-04'

要使用整数(假设它们是自 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
于 2012-06-04T21:16:36.247 回答
0

为什么在使用 sql 代码时不将时间戳 from_unixtime(timestamp/1000) 转换为 dateTime?你试过吗?

于 2012-06-04T20:59:34.807 回答