从分隔值中的分隔值查找字符串(Oracle PL-SQL)

从分隔值中的分隔值查找字符串(Oracle PL-SQL),oracle,plsql,Oracle,Plsql,如何为Oracle数据库编写查询,以便从包含逗号分隔的值列表的列中找到逗号分隔的值列表。传递给sql语句的:参数也是用户选择的逗号分隔值 例如 表中有一列包含 1 |‘A’、‘B’、‘C’ 2 |“C”和“A” 3 |“A”和“B” 在web应用程序界面上,我们有多个选择框,显示 A. B C 并允许用户选择一个或多个项目 如果选择A和B,我希望第1行和第2行显示,如果选择A,则所有三行都应显示B/c所有第1行到第3行中都有“A”值。您可以使用带有不同数量绑定值的where子句,具体取决于所选选

如何为Oracle数据库编写查询,以便从包含逗号分隔的值列表的列中找到逗号分隔的值列表。传递给sql语句的:参数也是用户选择的逗号分隔值

例如 表中有一列包含

1 |‘A’、‘B’、‘C’

2 |“C”和“A”

3 |“A”和“B”

在web应用程序界面上,我们有多个选择框,显示 A. B C 并允许用户选择一个或多个项目


如果选择A和B,我希望第1行和第2行显示,如果选择A,则所有三行都应显示B/c所有第1行到第3行中都有“A”值。

您可以使用带有不同数量绑定值的where子句,具体取决于所选选项的数量:

TEST@PRJ> create table t (c varchar2(100));
TEST@PRJ> insert into t values ('2 | ''C'',''A''');
TEST@PRJ> insert into t values ('3 | ''A'',''B''');
TEST@PRJ> select * from t where c like '%''A''%' and c like '%''B''%';

C
----------------------------------------------------------------------------------------------------------------
1 | 'A','B','C'
3 | 'A','B'

TEST@PRJ> select * from t where c like '%''A''%';

C
----------------------------------------------------------------------------------------------------------------
1 | 'A','B','C'
2 | 'C','A'
3 | 'A','B'
如果这些值按顺序存储,则可以使用单个绑定值:

TEST@PRJ> select * from t where c like '%''A''%''B''%';

C
-----------------------------------------------------------------------------------------
1 | 'A','B','C'
3 | 'A','B'

根据所选选项的数量,可以使用具有不同数量绑定值的where子句:

TEST@PRJ> create table t (c varchar2(100));
TEST@PRJ> insert into t values ('2 | ''C'',''A''');
TEST@PRJ> insert into t values ('3 | ''A'',''B''');
TEST@PRJ> select * from t where c like '%''A''%' and c like '%''B''%';

C
----------------------------------------------------------------------------------------------------------------
1 | 'A','B','C'
3 | 'A','B'

TEST@PRJ> select * from t where c like '%''A''%';

C
----------------------------------------------------------------------------------------------------------------
1 | 'A','B','C'
2 | 'C','A'
3 | 'A','B'
如果这些值按顺序存储,则可以使用单个绑定值:

TEST@PRJ> select * from t where c like '%''A''%''B''%';

C
-----------------------------------------------------------------------------------------
1 | 'A','B','C'
3 | 'A','B'

这个示例希望能有所帮助,它匹配的值与DB记录中字符串中出现的值的顺序无关

创建示例表:

CREATE TABLE t
(val VARCHAR2(100));
插入记录:

INSERT INTO t VALUES
('1|''A'',''B'',''C''');

INSERT INTO t VALUES
('2|''C'',''A''');

INSERT INTO t VALUES
('3|''A'',''B''');
检查值:

SELECT * FROM t;
检查“A”的解决方案:

SELECT val
  FROM t
 WHERE REGEXP_LIKE(val, '(A)');
检查A和B的溶液

SELECT val
  FROM t
 WHERE REGEXP_LIKE(val, '(A|B).*(A|B)');
如果要确保结果的
1 |
部分与任何内容都不匹配,则可以使用以下方法进行查询:

SELECT val
  FROM t
 WHERE REGEXP_LIKE(val, '(.\|.*)(A)');


希望这有帮助…

这个示例希望会有所帮助,它匹配值,而不管它们在DB记录的字符串中出现的顺序如何

创建示例表:

CREATE TABLE t
(val VARCHAR2(100));
插入记录:

INSERT INTO t VALUES
('1|''A'',''B'',''C''');

INSERT INTO t VALUES
('2|''C'',''A''');

INSERT INTO t VALUES
('3|''A'',''B''');
检查值:

SELECT * FROM t;
检查“A”的解决方案:

SELECT val
  FROM t
 WHERE REGEXP_LIKE(val, '(A)');
检查A和B的溶液

SELECT val
  FROM t
 WHERE REGEXP_LIKE(val, '(A|B).*(A|B)');
如果要确保结果的
1 |
部分与任何内容都不匹配,则可以使用以下方法进行查询:

SELECT val
  FROM t
 WHERE REGEXP_LIKE(val, '(.\|.*)(A)');


希望这能有所帮助……

CSV表格列中的列表表明设计不佳。你能射击分析师吗?你提到“在web应用程序界面上”。Php、Java、.NET、ruby可以更轻松地处理此设计。DCookie,我必须这样做,今天早上我也有同样的感觉:-)表列中的CSV列表表明设计很差。你能射击分析师吗?你提到“在web应用程序界面上”。Php、Java、.NET、ruby可以更轻松地处理此设计。DCookie,我将不得不这样做,我今天早上也有同样的感受:-)