我有两个相隔65秒的unix时间戳,我试图以这种方式查询mysql
相隔65秒1504684252 + 65
SELECT ask FROM live_rates WHERE
the_time
BETWEEN UNIX_TIMESTAMP(1504684252)和UNIX_TIMESTAMP(1504684317)SELECT ask FROM live_rates WHERE
the_time
BETWEEN FROM_UNIXTIME(1504684252)AND FROM_UNIXTIME(1504684317)
在我的表中,有一个事件从时间戳1504684252
开始到65秒后结束。为什么两个查询都没有返回数据?。
答案 0 :(得分:0)
如果the_time
是一个unix时间戳而不是1504684252
而不是2017-09-01 00:00:00
,那么你就不需要FROM_UNIXTIME
来转换一个unix时间戳到日期:
SELECT ask FROM live_rates WHERE the_time BETWEEN 1504684252 AND 1504684317
答案 1 :(得分:0)
UNIX_TIMESTAMP
将日期/时间作为参数并返回一个整数。当你用整数喂它时它返回0 - 所以你在0和0之间选择。
FROM_UNIXTIME
取整数,但会返回日期/时间 - 因此,如果the_time
是整数,则它们不兼容。
答案 2 :(得分:0)
你的问题并没有真正说清楚the_time
是什么数据类型 - 如果它已经是unix时间戳(即一个整数),只要将它作为一个整数查询,假设你似乎要知道日期范围的unix时间戳:
SELECT ask FROM live_rates WHERE the_time BETWEEN 1504684252 AND 1504684317
如果the_time
中的数据存储为日期时间,我建议您确保服务器确实将您提供的值转换为包含相关日期时间范围记录:
SELECT ask FROM live_rates WHERE id = abcdef
SELECT FROM_UNIXTIME(1504684252), FROM_UNIXTIME(1504684317)
运行这两个查询(替换了id)并注视数据。您可以找到原因,我确定 - 可能类似于时区问题,并且您的unix时间戳正在转换为UTC的某个时间,而您的表格数据显示在其他时间,因此您错误地将显示的时间转换为unix时间..或者可能是它的结束日期有一些时间分量超出了你指定的unix时间范围,即使它的日期部分是正确的。
如果没有一个完整的,可验证的示例(带有插入的测试数据的创建表语句和一个显示问题的选择,那么很难说肯定。试试sqlfiddle.com)
PS;不要像你在这里写的那样使用UNIX_TIMESTAMP();它不打算将unix时间戳传递给它。你要么传递它没有参数(在这种情况下它给你服务器时钟的当前日期时间,作为unix时间戳)或者你传递一些日期时间(并且它将返回该日期时间的等效unix时间戳)