【问题标题】:mysql select timestamps between a and b returning all or 0 timestampsmysql选择a和b之间的时间戳返回全部或0个时间戳
【发布时间】:2012-06-04 20:53:01
【问题描述】:

试过了

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')

我猜我遗漏了什么,但找不到什么!?

【问题讨论】:

  • 您是将时间戳存储为 int 还是 varchar?
  • 尝试使用 phpmyadmin 中的结构选项卡将类型更改为 int,除非您依赖 mysql 在不需要将时间戳指定为数据类型的地方生成当前时间戳

标签: mysql timestamp


【解决方案1】:

MySQL 需要 date literals,而不是整数:

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

【讨论】:

  • 如果在贝尔格莱德附近,欢迎您来杯啤酒和烤肉串;)这为我节省了一晚
【解决方案2】:

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

【讨论】:

  • 不太明白。示例会很有用。我真的尝试了解mysql如何处理日期和时间,但没有成功:(
  • 啊,蛋蛋打败了我,这就是我要去的地方。
猜你喜欢
  • 2012-02-29
  • 1970-01-01
  • 2013-10-18
  • 1970-01-01
  • 1970-01-01
  • 2022-11-12
  • 1970-01-01
  • 2018-04-17
  • 2016-02-16
相关资源
最近更新 更多