我收到了错误
BIGINT UNSIGNED值超出范围中的'(1301980250 - ..
mydb
)'news_articles
date
当我运行查询
SELECT *, ((1 / log(1301980250 - date)) * 175) as weight FROM news_articles ORDER BY weight;
Run Code Online (Sandbox Code Playgroud)
删除ORDER BY条件也会删除错误.我该如何解决?
更新:日期字段包含unix时间戳(例如:1298944082).将MySQL从5.0.x升级到5.5.x后,错误开始出现
有什么帮助吗?
ab5*_*act 76
我最近遇到了这个并找到了最合理的解决方案,只需将任何UNSIGNED整数转换为SIGNED.
SELECT *, ((1 / log(1301980250 - cast(date as signed)) * 175) as weight FROM news_articles ORDER BY weight
Run Code Online (Sandbox Code Playgroud)
Joy*_*abu 16
问题是由wallyk建议的无符号整数溢出引起的.它可以解决
SELECT *, ((1 / log((date - 1301980250) * -1)) * 175) as weight FROM news_articles ORDER BY weight;
(这个对我有用)`NO_UNSIGNED_SUBTRACTION
(尚未检查)这有时可能是由数据中的空值引起的。
使用 IFNULL 设置默认值(时间戳可能为 0 是一个糟糕的默认值,实际上在这种情况下,您最好在 WHERE 子句中排除日期和空日期)
SELECT (123456 - IFNULL(date, 0)) AS leVar
归档时间: |
|
查看次数: |
52256 次 |
最近记录: |