从分隔值中的分隔值查找字符串(Oracle PL-SQL)
如何为Oracle数据库编写查询,以便从包含逗号分隔的值列表的列中找到逗号分隔的值列表。传递给sql语句的:参数也是用户选择的逗号分隔值 例如 表中有一列包含 1 |‘A’、‘B’、‘C’ 2 |“C”和“A” 3 |“A”和“B” 在web应用程序界面上,我们有多个选择框,显示 A. B C 并允许用户选择一个或多个项目从分隔值中的分隔值查找字符串(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子句,具体取决于所选选
如果选择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,我将不得不这样做,我今天早上也有同样的感受:-)