0

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

它工作得很好,但我不明白它背后的原因

4

1 回答 1

1

你运行的是什么版本的mysql?检查此链接

并检查文档以了解为什么您会得到负值:

如果不带参数调用,则返回 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 节,“强制转换函数和运算符”。

于 2012-12-15T11:56:49.247 回答