0

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

4

2 回答 2

1

您可以使用CAST()CONVERT()将它们转换为有符号整数以进行计算。但是,如果你有任何大于有符号整数的东西,你会得到不想要的结果。无论如何,您不应该使用整数作为时间戳。使用时间戳或日期时间字段。

于 2012-04-11T15:00:05.963 回答
1

我认为你应该重新定义如下

WHERE g.start_date_time > $currentTime ORDER BY g.start_date_time

这将允许在 g.start_date_time 列上使用索引,您不必按 (g.start_date_time-$currentTime) 排序

于 2012-04-11T15:01:41.770 回答