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 に答える