2011-12-16 26 views
1

私は歴史的理由から文字列ですが、今では新しい値が数字に入れられているタルベでこの列を持っています。varchar列のMysql番号クエリの問題

私は数字の間隔から最大の価値を見つける必要がありますがop_calculが、それは些細なSQLあったであろう数であったであろう場合は値がDB内の文字列:(

です:

Select MAX(op_calcul) FROM nom_prod where op_calcul >=500 and op_calcul < 5000 

しかし、いくつかのトラブルに私を置くvarchar型としてそれらを持つ。

は、さまざまなシナリオをしようとしましたが、まだ解決策が付属していませんでした。

任意のヒントを?

おかげ

答えて

1
SELECT MAX(CAST(op_calcul as SIGNED)) FROM nom_prod... 

は、トリックを行う必要があります。 WHERE句もキャストする必要があります。

理想的には、MAXとWHEREの両方でパフォーマンス上の理由から、整数列を使用する必要があります。数字以外のデータや範囲外のデータがありますか?もしそうでなければ、列の型を変更するのはかなり簡単です。

+0

印象的!!! 10分で解決策として投票する。ありがとう – Cris

+0

列に "コード12ac"のようなvarcharのような履歴データがあります – Cris

+1

ああ...その場合、それらの行が正しくキャストされない可能性があります。正しく形成された整数でないものは、0にキャストされる可能性が高いです。編集:その編集は本当に必要でしたか?余分なもののようだ。 – Corbin

1
SELECT MAX(CAST(`op_calcul` AS SIGNED)) 
FROM `nom_prod` 
WHERE `op_calcul` >= 500 
AND `op_calcul` < 5000; 
+1

ほとんどの意見は、予約語がエンティティ名として使用されていない限り(通常は使用しないでください)、通常は使用しないでください。彼らはSQLの移植性を犠牲にしています(ただし、実際にはほとんどありません)。 – Corbin