2017-02-27 14 views
1

私はmysqlを使用しています。値が実際に周りに回すことができ値として使用する前のSQLプロセス文字列

"50 000 - 100 000 |##| 300 000 - 400 000" 

私はこのようなものになるだろう値を持つ列を持っています。たとえば:

"300 000 - 400 000 |##| 50 000 - 100 000" 

そして、かなり私にはそれが意味する必要があるもの50 000 - 400 000です。

range_column ("50 000 - 100 000 |##| 300 000 - 400 000") < max_value AND column range_column ("50 000 - 100 000 |##| 300 000 - 400 000") > min_value. 

が、このことも可能のようなものです:

それから私は、SQL内のそれを比較すると、この列かどうかを確認する必要がありますか?ヘルプ

+0

あなたの例が50,000 - 400,00で、300,00 - 100,000ではないのはなぜですか?範囲が有効であることをどのように知っていますか? –

+0

これらは2つの異なる範囲です。しかし、私はそれらの範囲を組み合わせる必要があり、それは50 000〜400 000になります。 – DaveLV

+0

3番目の範囲も100 000〜200 000になる可能性があります。 – DaveLV

答えて

1

ため

おかげでこれがあなたのためにあなたの範囲から最小値と最大値を取得します: -

SELECT MIN(aValue) AS range_start, 
     MAX(aValue) AS range_end 
FROM 
(
    SELECT CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(REPLACE(REPLACE(REPLACE(some_column, ' - ', ','), ' |##| ', ','), ' ', ''), ',', tens.aCnt * 10 + units.aCnt + 1), ',', -1) AS UNSIGNED) AS aValue 
    FROM some_table 
    CROSS JOIN (SELECT 1 AS aCnt UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 0) units 
    CROSS JOIN (SELECT 1 AS aCnt UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 0) tens 
) sub0 

これは、不要な余分なフォーマッティングを取り除くためにREPLACE、およびでREPLACEingスペースを使用して使用していますコンマで区切ってリストにします。次に、これを複数の固定クエリと結合して、1〜100の値のリストを取得し、それを使用してコンマ区切りのリストを分割します。

関連する問題