超出mysql的范围错误

时间:2012-12-15 11:35:18

标签: mysql hacker-news

我试图使用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)

它的工作完美,但我不理解它背后的原因

1 个答案:

答案 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节“强制转换函数和运算符”。