ORACLE实现类似mysql的find_in_set

ORACLE实现类似mysql的find_in_set
最新回答
风中混乱工会

2021-11-06 22:12:12

在Oracle数据库中,处理逗号分隔字段的搜索需求,虽无直接等同于MySQL的find_in_set函数,但可运用正则表达式实现类似功能。

假设数据库中存在一个列,值为ID字符串,用户需依据传入值查询该列中包含该值的数据。

通过查询找到一个算法,将逗号分隔的文字转换为多行记录,步骤如下:

1. 使用正则表达式`regexp_substr`提取字符串中的每一部分。

2. SQL语句如下:`select regexp_substr('a,b,c', '[^,]+', 1, rownum) from dual connect by rownum <= length('a,b,c') - length(replace('a,b,c', ',', '')) + 1`。

3. 该方法实现将逗号分隔的文本转换为多行记录。

4. 对转换后的记录进行筛选,实现类似find_in_set的功能。

具体SQL语句如下:

sql

select *

from (select 'a,b,c,ab' a from dual union select 'db,ab,c' a from dual) t

where 'c' in

(select regexp_substr(t.a, '[^,]+', 1, rownum)

from dual

connect by rownum <= length(t.a) - length(replace(t.a, ',', '')) + 1)