根据给定的参数值提取字符串 我在桌子下面:
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
答案 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
这可能不会很快,重新设计您的数据源和存储方式可能会更好,以避免出现这种情况。