逗号分隔列表 Oracle SQL



我在单个字段中有一个逗号分隔值的列表,需要找到满足特定条件的所有行。我使用的代码是:

select * from table where column_name in
(
select regexp_substr('A+','A-','aabn','[^,]+', 1,level) from table
connect by regexp_substr('A+','A-','aabn', '[^,]+', 1,level) is not null
);

所以我想找到所有包含 A+、A- 和 aabn 的行

为什么不只使用单个正则表达式?

where regexp_like(column_name, '(^|,)(A[+]|A[-]|aabn)($|,)')

这是一个DB<>小提琴。

此外,尽管正则表达式功能强大,但不应在单个字符串中存储多个值。 Oracle 还有许多其他选项用于存储多个值,包括传统的关联/联结表。

你不需要正则表达式,只需使用LIKE来检查你需要的值是否是列的子字符串(两者都用分隔符包围(:

如果您想要列表中的所有 3 个,请使用AND

SELECT *
FROM   table_name
WHERE  ',' || column_name || ',' LIKE '%,A+,%'
AND    ',' || column_name || ',' LIKE '%,A-,%'
AND    ',' || column_name || ',' LIKE '%,aabn,%'

如果您希望列表中的任何 1,请使用OR

SELECT *
FROM   table_name
WHERE  ',' || column_name || ',' LIKE '%,A+,%'
OR     ',' || column_name || ',' LIKE '%,A-,%'
OR     ',' || column_name || ',' LIKE '%,aabn,%'

最新更新