首页 > 解决方案 > 在字符串中查找子字符串但不遵循命令

问题描述

我得到了这样的数据列表

数据
1,2,3,4 一个
2,3,4
1,4 C
2,4 D

mysql中的这些场景应该匹配:

查找数据 匹配集
1,2 一个
1,4 甲,丙
2,4 甲、乙、丁
1,3,4 一个

幸运的是,来自 Data 的列表总是 INT 并按升序排序。

标签: mysql

解决方案


假设您只在给定查询中查找“查找数据”结果之一,您可以为此使用 LIKE。但是您需要在每个数字之前和之后使用一些分隔符才能使其起作用;我要使用;. 所以要找到“1,2”:

select group_concat(Set order by Set) as 'Matched Set'
from list_of_data
where concat(';',replace(Data,',',';;'),';') LIKE '%;1;%;2;%';

这里我们改变每一行的数据;例如,1,3,4变成;1;;3;;4;. 然后搜索您要查找的分隔数字,并%允许在每个数字之前或之后使用其他数字。如果您无法1,2在代码中将其翻译成此表单,则可以在查询中执行此操作,例如:

LIKE concat('%;',replace('1,2',',',';%;'),';%')

推荐阅读