oracle - 在 Oracle PLSQL 中使用潜台词在文本中搜索
问题描述
我在 master_t 表中有这个查询,它包含 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 变量中,但是此查询没有获取数据,因为多数据分隔符
无论如何调整查询,以便我可以将潜文本与全文注释进行比较:顺序不同。
预期输出:LL PP CC
谢谢
解决方案
这是一个选项(阅读代码中的注释):
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 的回复相当粗鲁;如果我是 Ed,我会确保不回答您未来的任何问题(阅读:我会让您解决自己的问题)。
推荐阅读
- python - Python:有效地组合列表字典
- rust - 带有通配符使用声明的 Rust 子模块行为
- javascript - 在 JavaScript 中将日期转换为另一个时区并使用正确的时区打印
- python-3.x - BS4 找不到 li 项?
- swift - 请求结果结构 firebasedatabase Swift
- python - 无法在 conda python 3.8 env 上正确安装 awswrangler(连接问题)
- php - Wordpress 永久链接 Apache mod_rewrite 启用但仍然无法正常工作
- tensorflow - 关于 NN 中的输入
- python - 从 pandas 数据框列中的列表创建配对嵌套列表,其中第一对的结束元素应该是下一个的开始元素
- linux-kernel - 尝试安装 VirtualBox-6.1 时出错(安全启动开启)