0

最小フィールドと最大フィールドを含む検索フォームがあります。MySQL テーブルをクエリします。

フィールド「定価」は varchar で、200,000 や 34,150 などのコンマを含む値が含まれています。

正しいレコードが取得できません...

( List PriceBETWEEN '100000' AND '101000' ) 101900 - 最大値より高いレコードを取得します。

( List PriceBETWEEN '100,000' AND '101,000' ) >= min かつ <= max のレコードを取得します

( List Price<= '101,000' ) 100,000 のようなレコードを取得しますが、1,280,000 と 1,300,000 も取得します

( List Price>= '300,000' ) 399,900 だけでなく 70,000 のレコードも取得します

フィールド値が int ではなく char であるためですか? mysql select のフィールドからコンマを取り除くことはできますか? ( List Price>= '300,000' <- どうにかして数値からコンマを削除すると、select は 'List Price' >= 300000 となります)

ありがとう...

4

4 に答える 4

1

文字列を整数にキャストする必要があります。他に方法はありません。

CAST(`list price` AS SIGNED) BETWEEN 100000 AND 101000
于 2012-04-05T14:49:24.987 に答える
1

その varchar フィールドを 10 進数型に変換して、適切な数値比較を行う必要があります。コンマを削除して CONVERT() を実行することで、強制的に数値風にすることができます。

CAST(REPLACE(`List Price`, ',', '') AS DECIMAL) BETWEEN 100000 AND 101000
于 2012-04-05T14:50:28.160 に答える
0

すべてを文字列として扱っています。

引数を引用符で囲まないでください。引数は数値であり、mySQL が文字列を数値に変換します。

于 2012-04-05T14:56:25.257 に答える
0

MySQL のバージョンは? List priceコラムにはインデックスがありますか?このバグは関係ありますか?

変換については、マニュアルを参照してください。

比較演算の両方の引数が文字列の場合、それらは文字列として比較されます。

唯一の賢明な解決策は、スキーマを変更する (つまり、列の型を変更する) ことです。それ以外の場合はcast、各クエリで a を使用しますが、これはかなり遅くなります。

于 2012-04-05T14:54:01.330 に答える