mysql选择a和b之间的时间戳,返回全部或0个时间戳

Prv*_*vul 4 mysql timestamp

试过这个

select * from table where timestamp_field between 1330560000 and 1336170420
Run Code Online (Sandbox Code Playgroud)

还有这个

select * from table where timestamp_field >=1330560000 and timestamp_field<=1336170420
Run Code Online (Sandbox Code Playgroud)

都返回空结果集.

但是这个

select * from table where timestamp_field >= 1330560000
Run Code Online (Sandbox Code Playgroud)

返回所有行

使事情更荒谬

select * from table where timestamp_field <= 1336170420
Run Code Online (Sandbox Code Playgroud)

返回空结果集.

当然,在1336170420 = 4.may 2012之前,之间和之后存在时间戳值.并且1330560000 = 1.march 2012.

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

UPDATE table SET timestamp_field = STR_TO_DATE(timestamp_string, '%d.%m.%Y')
Run Code Online (Sandbox Code Playgroud)

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

egg*_*yal 6

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

SELECT *
FROM   table
WHERE  DATE(timestamp_field) BETWEEN '2012-03-01' AND '2012-05-04'
Run Code Online (Sandbox Code Playgroud)

要使用整数(假设它们是自UNIX纪元以来的秒数),首先使用MySQL的FROM_UNIXTIME()函数进行转换:

SELECT *
FROM   table
WHERE  timestamp_field BETWEEN FROM_UNIXTIME(1330560000)
                           AND FROM_UNIXTIME(1336170420)
Run Code Online (Sandbox Code Playgroud)

或者UNIX_TIMESTAMP()用于将列转换为UNIX表示形式:

SELECT *
FROM   table
WHERE  UNIX_TIMESTAMP(timestamp_field) BETWEEN 1330560000 AND 1336170420
Run Code Online (Sandbox Code Playgroud)

  • 如果靠近贝尔格莱德,欢迎你来喝啤酒和烤肉串;)这让我度过了一个晚上 (3认同)