2017-02-27 58 views
1

我正在使用mysql。使用它作爲值之前的SQL過程字符串

我有值的列,這將是這樣的:

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

值實際上可以轉頭。例如:

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

而且我對它的需求很大,它的意思是50 000 - 400 000

然後,我需要它比較中的SQL,並檢查此列:

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. 

是這樣甚至可能嗎?

感謝您的幫助

+0

爲什麼您的示例是50,000 - 400,00而不是300,00 - 100,000?你怎麼知道範圍是有效的? –

+0

這些是2個不同的範圍。但是我需要將這些範圍合併起來,那就是50 000 - 400 000. – DaveLV

+0

甚至可能有第三個範圍是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擺脫不必要的額外格式,並且採用保換空間有逗號把它變成逗號分隔的列表。然後交叉連接這兩個固定的查詢來獲得1到100之間的值的列表,並使用它來分割逗號分隔列表。所有用作子查詢的結果,使用MIN和MAX

相關問題