我的表中有一列start_date_time INT UNSIGNED
。
我有这样的查询
... WHERE (g.start_date_time-$currentTime) > 0 ORDER BY (g.start_date_time-$currentTime)
我收到一个错误Numeric value out of range: 1690 BIGINT UNSIGNED value is out of range in...
.如果我将其设置为 SIGNED,当然一切正常,但我的问题是有没有办法让它保持无符号但无论如何计算负值(我只需要计算,不需要将它们存储在任何地方),或者我应该重新定义我的查询?
我认为您应该重新定义如下
WHERE g.start_date_time > $currentTime ORDER BY g.start_date_time
这将允许g.start_date_time列上使用索引,并且您不必按 (g.start_date_time-$currentTime) 排序
您可以使用
CAST()
或CONVERT()
将它们转换为有符号整数以进行计算。但是,如果你有比有符号整数大的东西,你会得到不需要的结果。无论如何,您都不应该使用整数作为时间戳。使用时间戳或日期时间字段。