【问题标题】:select timestamp from mysql从mysql中选择时间戳
【发布时间】:2016-02-16 13:35:06
【问题描述】:

我遇到了与 TIMESTAMP 列相关的条件的查询问题。所以我有一个名为 table1 的表,它有两列 start_timeend_time。它们都存储 TIMESTAMP。我想在我的数据库中查询end_time 高于给定时间戳值且低于给定时间戳值的特定行。基本上,我想获取end_time 在给定 TIMESTAMP 范围之间的所有行。

我发现在我的情况下,以下查询有效:

SELECT * FROM table1
WHERE UNIX_TIMESTAMP(end_time) >= FROM_UNIXTIME('2015-11-30 20:14:00') 
AND UNIX_TIMESTAMP(end_time) <= FROM_UNIXTIME('2015-11-30 20:14:05')

但这不是我想要的。我想给 TIMESTAMP 值而不是 DATE

同样奇怪的是,这个查询返回的值的 end_time 的日期早于给定的时间戳:

SELECT * FROM table1 WHERE end_time > FROM_UNIXTIME( '2015-11-30 20:20:05' )

上面的查询返回 end_timestamp2015-11-30 20:18:05 的行

我觉得我在这里遗漏了一些东西。我应该为我的end_time 使用 INT 而不是 TIMESTAMP 吗?我相信以下查询应该返回预期值,但它什么也没给我:

SELECT * FROM table1
WHERE end_time >= FROM_UNIXTIME( 1448914740 ) 
AND end_time <= FROM_UNIXTIME( 1448914810 )

【问题讨论】:

    标签: php mysql timestamp unix-timestamp


    【解决方案1】:

    您无需使用FROM_UNIXTIME 转换您的WHERE 子句值。 FROM_UNIXTIME 将 TIMESTAMP 转换为日期。如果您要向 SQL 语句发送已采用 TIMESTAMP 格式的值,您的 SQL 将如下所示:

    SELECT * FROM table1 WHERE end_time >= 1448914740 AND end_time <= 1448914810
    

    如果您发送日期字符串(例如“2015-11-30 20:14:00”和“2015-11-30 20:14:05”),那么您的 SQL 将如下所示:

    SELECT * FROM table1 WHERE FROM_UNIXTIME(end_time) >= '2015-11-30 20:14:00' AND FROM_UNIXTIME(end_time) <= '2015-11-30 20:14:05'
    

    由于您将表中的值存储为TIMESTAMP,我建议您使用第一个SQL 语句。

    【讨论】:

      猜你喜欢
      • 2013-03-28
      • 2010-12-15
      • 1970-01-01
      • 1970-01-01
      • 2016-07-19
      • 2010-12-14
      • 1970-01-01
      • 1970-01-01
      • 2012-08-08
      相关资源
      最近更新 更多