2017-02-27 53 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

相关问题