根据给定的参数值提取字符串

时间:2014-09-12 09:26:40

标签: mysql substring

根据给定的参数值提取字符串 我在桌子下面:

ID技能

1 Java-16,Oracle-10,pl / sql-9,BI-19,Perl-10

2 Oracle-10,sql-9,Java-20

3 Java-10,C-10,Oracle-50

我的sql是参数化查询,当我输入输入值如:skill1 = Java和:skill2 = Ora然后我的输出应如下所示: 注意:上面的列技能总是具有以上两个参数的值,因为它基于子查询返回(通过比较类似的运算符),现在我需要仅使用如下的参数值提取值。

列的值具有连接技能,数字用','分隔。如图所示的另一项技能

输出应该是这样的:

ID技能

1 Java-16,Oracle-10

2 Oracle-10,Java-20

3 Java-10,Oracle-50

1 个答案:

答案 0 :(得分:0)

一个可能的解决方案,打破逗号分隔列表如下(假设您只需要以传递的参数之一开头的技能)

SELECT ID, GROUP_CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(Skills, ',', 1 + units.i + tens.i * 10), ',', -1))
FROM sometable,
(SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) units,
(SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) tens
WHERE SUBSTRING_INDEX(SUBSTRING_INDEX(Skills, ',', 1 + units.i + tens.i * 10), ',', -1) LIKE :skill1
OR SUBSTRING_INDEX(SUBSTRING_INDEX(Skills, ',', 1 + units.i + tens.i * 10), ',', -1) LIKE :skill2
GROUP BY ID

这可能不会很快,重新设计您的数据源和存储方式可能会更好,以避免出现这种情况。