2012-04-11 18 views
0

私のテーブルにはstart_date_time INT UNSIGNEDの列があります。MySQLが負の値を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...を取得します。私はそれをに設定した場合、もちろんがすべて動作しますが、私の質問はそれを保つ方法です。UNSIGNEDしかし、とにかく負の値を計算します(計算が必要です。どこにでも保存する必要はありません)。私のクエリを再定義する必要がありますか?

答えて

1

は、私はあなたがg.start_date_time列にインデックスを使用できるようになります

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

これを次のように再定義すべきだと思う、あなたは(g.start_date_time- $ CURRENTTIME)

で注文する必要はありません。
1

計算のために符号付き整数にキャストするには、CAST()またはCONVERT()を使用できます。しかし、そこに符号付き整数より大きなものがあれば、望ましくない結果が得られます。とにかく、タイムスタンプに整数を使うべきではありません。タイムスタンプまたは日時フィールドを使用します。

関連する問題