Oracle 表中有一个 VARCHAR2 字段。它可以包含任意顺序的字母组合:
等等
然后我有另一个字符串作为 SQL 查询参数。它还包含类似的字母。
我想检测该字段是否包含参数中的所有字母。
示例:
Field Parameter Result
BLWOD WB True
OBLD BD True
OBLD BDW False
如果参数中只有一个字母,我可以简单地使用
LIKE
子句:
SELECT MyObjID FROM MyTable WHERE ColorField LIKE :ColorParam
但是当我必须将
:ColorParam
拆分成字母并一次进行多次评估时该怎么办?
您可以使用相关子查询将
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 | 假 |