我的表格中有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 当然一切正常,但我的问题是有没有办法保持 UNSIGNED 但无论如何计算负值(我只需要计算,不要'我需要将它们存储在任何地方),或者我应该重新定义我的查询?
答案 0 :(得分:1)
您可以使用CAST()
或CONVERT()
将它们转换为有符号的整数进行计算。但是,如果你有任何大于有符号整数的东西,你将得到不希望的结果。无论如何,您不应该使用整数作为时间戳。使用时间戳或日期时间字段。
答案 1 :(得分:1)
我认为你应该重新定义如下
WHERE g.start_date_time > $currentTime ORDER BY g.start_date_time
这将允许在g.start_date_time列上使用索引,而您不必按顺序排序(g.start_date_time- $ currentTime)