根据下表中给定的参数值提取字符串:
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这样的输入值时,我的输出应该如下:注意:上面的列技能总是具有上面两个参数的值,因为它是基于子查询返回的(通过比较like运算符),现在我只需要提取参数值,如下所示。
该列的值是将数字用',‘分隔的技能连接到另一个技能,如图所示
输出应如下所示:
ID技能
1个Java-16、Oracle-10
2个Oracle-10、Java-20
3 Java-10、Oracle-50
发布于 2014-09-12 19:13:23
一种可能的解决方案是,分解逗号分隔的列表,如下所示(假设您只需要以传递的参数之一开始的技能)
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这可能不会很快,重新设计您的数据源和存储数据的方式可能会更好,以避免这种情况。
https://stackoverflow.com/questions/25805010
复制相似问题