Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
逗号分隔列表oracle sql_Sql_Oracle - Fatal编程技术网

逗号分隔列表oracle sql

逗号分隔列表oracle sql,sql,oracle,Sql,Oracle,我在一个字段中有一个逗号分隔的值列表,需要找到满足特定条件的所有行。我使用的代码是: 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

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

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)($|,)')
他是一把小提琴


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

您不需要正则表达式,只需使用LIKE检查所需的值是否为列的子字符串,这两个字符串均由分隔符字符包围:

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

挑选* 从表\u名称 其中,“,”| |列| |“,”如“%”,A+,%” 和“,”| |列| |“,”类似“%,A-,%” 和“,”| |列| |“,”类似“%”,aabn,%” 如果需要列表中的任何1,请使用或:

挑选* 从表\u名称 其中,“,”| |列| |“,”如“%”,A+,%” 或“,”| |列| |“,”如“%”,A-,%” 或“,”| |列| |“,”如“%”,aabn,%”
这不会根据OP的要求找到A+、A-和aabn,它会找到三者中任意一个的行。@MT0。我一试就行了。我已经包括了一个DBFIDLE。你的代码找到了+或a-或aabn,但没有找到a+、a-和aabn,因为OP在他们问题@MT0的最后一行中指出。在这种情况下,英语是模棱两可的。OP需要澄清该条件是否与任何或所有值匹配。它是[-+]还是[+-]没有区别,因为Oracle将在它出现在列表中的第一个或最后一个时或作为范围表达式的结束范围点来处理。@ArsenaQL。样本数据和预期结果将有所帮助。你需要这三个代码来匹配吗?或者和任何一个匹配都可以吗?