Oracle 字段是否包含字符串中的所有字母?

问题描述 投票:0回答:1

Oracle 表中有一个 VARCHAR2 字段。它可以包含任意顺序的字母组合:

  • DLBWO
  • OWB
  • 体重

等等

然后我有另一个字符串作为 SQL 查询参数。它还包含类似的字母。

我想检测该字段是否包含参数中的所有字母。

示例:

Field   Parameter Result
BLWOD     WB       True
OBLD      BD       True
OBLD      BDW      False

如果参数中只有一个字母,我可以简单地使用

LIKE
子句:

SELECT MyObjID FROM MyTable WHERE ColorField LIKE :ColorParam

但是当我必须将

:ColorParam
拆分成字母并一次进行多次评估时该怎么办?

sql oracle
1个回答
0
投票

您可以使用相关子查询将

parameter
拆分为字母,并检查所有字母是否都在
field
中:

SELECT field,
       parameter,
       CASE
       WHEN 0 < ALL(
                  SELECT INSTR(field, SUBSTR(parameter, LEVEL, 1))
                  FROM   DUAL
                  CONNECT BY LEVEL <= LENGTH(parameter)
                )
       THEN 'true'
       ELSE 'false'
       END AS result
FROM   table_name 

对于样本数据:

CREATE TABLE table_name (Field, Parameter) AS
SELECT 'BLWOD', 'WB'  FROM DUAL UNION ALL
SELECT 'OBLD',  'BD'  FROM DUAL UNION ALL
SELECT 'OBLD',  'BDW' FROM DUAL;

输出:

参数 结果
BLWOD WB 真实
OBLD BD 真实
OBLD BDW

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.