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

Mysql 根据给定的参数值提取字符串,mysql,substring,Mysql,Substring,根据给定的参数值提取字符串 我有以下表格: 身份证技能 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运算符),现在我只需要使用下面的参数值提取值 列的值是将数

根据给定的参数值提取字符串 我有以下表格:

身份证技能

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运算符),现在我只需要使用下面的参数值提取值

列的值是将数字以“,”分隔的技能连接到另一个技能,如图所示

输出应如下所示:

身份证技能

1 Java-16、Oracle-10

2 Oracle-10、Java-20


3 Java-10,Oracle-50

一种可能的解决方案,将逗号分隔的列表分解如下(假设您只需要从传递的参数之一开始的技能)


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

看看如何使用更好的数据库结构。它是可能的,但不能像您目前所拥有的那样可扩展或可靠it@exussum值不是直接来自实际表,而是在最终结果集中,正如我提到的“技能”列通过串联值返回,正如我在单行中显示的最终用户编号技能和特定候选人的exp,数据库设计正确。发布表的实际外观,因为ID、设置的技能不是存储它的“好”方法。您可以使用like子句。参数如何引用要返回的字段?他们只是在寻找以传递的值开头的逗号分隔的值吗?看起来有点复杂,我正在尝试重新设计逻辑,谢谢大家。
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