我试图使用mysql实现黑客新闻算法并得到以下错误
Double value is out of range in
pow(((unix_timestamp() - unix_timestamp(postDateTime))/3600 + 1),1.5)
Where the value of postDateTime is 2012-12-15 10:41:31
如果我将上述内容实现为
pow(((unix_timestamp() - unix_timestamp(cast(postDateTime as signed)))/3600 + 1),1.5)
它的工作完美,但我不理解它背后的原因
答案 0 :(得分:1)
你在运行什么版本的mysql?检查this link。
并检查the documentation以了解您获得负值的原因:
如果没有参数调用,则返回一个Unix时间戳(从那以后的秒数) '1970-01-01 00:00:00'UTC)作为无符号整数。如果是UNIX_TIMESTAMP() 使用日期参数调用,它返回参数的值 自1970-01-01 00:00:00'UTC以来的秒数。 date可以是DATE字符串, DATETIME字符串,TIMESTAMP或格式为YYMMDD或的数字 YYYYMMDD。服务器将日期解释为当前时间的值 区域并将其转换为UTC的内部值。
...
如果要减去UNIX_TIMESTAMP()列,可能需要将结果转换为有符号整数。请参见第12.10节“强制转换函数和运算符”。