在 Oracle PLSQL 中使用子文本搜索文本

search in text using subtext in Oracle PLSQL

我在 master_t table 中有这个查询,其中包含 ration_category 列和扇区列中的许多扇区,例如 'BN:INS' 或 'BN' 或'BN:IM:INS' 等..

select distinct ratio_category d from master_t
where status = 'Y' and (SECTORS = :P23_SECTORS or
(INSTR(':'||:SECTORS ||':',:P23_SECTORS)>0 OR UPPER(:P23_SECTORS) = 'ALL')) order by ratio_category


 P23_SECTORS= 'BN:INS'

 SECTORS='INS:MFI:SB:BN'

: is a separator of multi data

我需要检查 P23_sectors 中的数据是否存在于 SECTORS 变量中, 但是这个查询没有得到数据,因为多数据分隔符

是否可以调整查询以便我可以比较潜台词和全文 注意:顺序不同。

预期输出: 二 聚丙烯 抄送

谢谢

这是一个选项(阅读代码中的注释):

SQL> with master_t (ratio_category, sectors) as
  2    -- sample data
  3    (select 1, 'INS:MFI:SB:BN' from dual union all
  4     select 2, 'BN:LF'         from dual
  5    ),
  6  split_t as
  7    -- split SECTORS into rows
  8    (select ratio_category,
  9            sectors,
 10            regexp_substr(sectors, '[^:]+', 1, column_value) sec
 11     from master_t cross join
 12          table(cast(multiset(select level from dual
 13                              connect by level <= regexp_count(sectors, ':') + 1
 14                             ) as sys.odcinumberlist))
 15    ),
 16  split_23 as
 17    -- split P23_SECTORS into rows
 18    (select regexp_substr('&&P23_SECTORS', '[^:]+', 1, level) sec,
 19            regexp_count('&&P23_SECTORS', ':') + 1 cnt
 20     from dual
 21     connect by level <= regexp_count('&&P23_SECTORS', ':') + 1
 22    )
 23  -- return rows that contain complete P23_SECTORS value(s)
 24  select t.ratio_category, t.sectors
 25  from split_t t join split_23 s on s.sec = t.sec
 26  group by t.ratio_category, t.sectors
 27  having count(*) = max(s.cnt);
Enter value for p23_sectors: BN:INS

RATIO_CATEGORY SECTORS
-------------- -------------
             1 INS:MFI:SB:BN

SQL>

注意人们发表的评论。他们确实有丰富的编程经验,您更愿意听听他们的意见,并感谢他们花时间检查您的问题。你对埃德的回复相当粗鲁;如果我是 Ed,我会确保不会回答您以后的任何问题(阅读:我会让您解决自己的问题)。