MySQL计算INT UNSIGNED的负值

时间:2012-04-11 14:53:38

标签: php mysql

我的表格中有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 但无论如何计算负值(我只需要计算,不要'我需要将它们存储在任何地方),或者我应该重新定义我的查询?

2 个答案:

答案 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)