sql - 使用正则表达式查找与 Oracle 表匹配的字符串
问题描述
我在接收 company_name 输入的 Oracle 12c 数据库上有一个 Oracle 存储过程。从那个 company_name 中,我需要找到并标记联邦机构。为此,我有一个表 (TBL_FED_KEY),其中包含一列 (KEY_1) 关键字。该表包含近 50 个值,例如:
ARMY
FEDERAL
AIR FORCE
VETERANS
HOMELAND SECURITY
INDIAN HOSPITAL
WILL ROGERS
为了让您了解可以传递给程序的 company_name 字符串,以下是示例:
US Army - Munson Health Center
Federal Bureau of Prisons,BOP/DOJ-
Hickam Air Force Base Pharmacy
Minnesota Veterans Home Pharmacy
P.H.S. Indian Hospital
Will Rogers Health Center
可以使用什么 Oracle SQL 将传入的 company_name 与 TBL_FED_KEY.KEY_1 进行匹配?我已经尝试了 REGEXP_INSTR 的多种变体,但我似乎无法让任何东西 100% 工作。REGEXP_INSTR 甚至是完成此任务的最佳工具吗?
谢谢!
解决方案
我不确定该程序在将公司“标记”为联邦与非联邦之后应该做什么。相反,我会将其编写为如下所示的函数(但如果需要,您可以轻松地在过程中重用大部分代码)。
然后我说明如何在 SQL 中直接使用该函数。如果需要,您也可以在 PL/SQL 中使用它,但在大多数情况下您不需要。注意 - 相同的想法可以专门在 SQL 中实现,从而加快执行速度,因为您根本不需要 PL/SQL。重要 - 即使在普通 SQL 中,这也应该通过半连接来实现,正如我所演示的那样,以便更快地执行。
设置:
create table tbl_fed_key (key_1 varchar2(200));
insert into tbl_fed_key
select 'ARMY' from dual union all
select 'FEDERAL' from dual union all
select 'AIR FORCE' from dual union all
select 'VETERANS' from dual union all
select 'HOMELAND SECURITY' from dual union all
select 'INDIAN HOSPITAL' from dual union all
select 'WILL ROGERS' from dual
;
commit;
功能代码:
create or replace function is_federal_institution(company_name varchar2)
return varchar
deterministic
as
is_fed varchar2(1);
begin
select case when exists ( select key_1
from tbl_fed_key
where instr(upper(company_name), upper(key_1)) > 0
)
then 'Y' else 'N' end
into is_fed
from dual;
return is_fed;
end;
/
SQL测试:
with
inputs (str) as (
select 'Joe and Bob Army Supply Store' from dual union all
select 'Mary Poppins Indian Hospital' from dual union all
select 'Bridge Association of NYC' from dual union all
select 'Will Rogers Garden' from dual union all
select 'First Federal Bank NA' from dual
)
select str, is_federal_institution(str) as is_federal
from inputs
;
STR IS_FEDERAL
------------------------------ ----------
Joe and Bob Army Supply Store Y
Mary Poppins Indian Hospital Y
Bridge Association of NYC N
Will Rogers Garden Y
First Federal Bank NA Y
如您所见,我提出了一些误报- 以说明这个“技术”解决方案只是部分的重要事实。如果准确性很重要,人类仍然需要查看单个命中。
推荐阅读
- unity3d - 光晕和镜头光晕
- javascript - 单选按钮作为选项卡窗格控件
- angular - Angular:如何最好地处理初始化/加载问题
- r - 查找共享一个共同水平的两个水平的值的比例
- python - Python for -m pip install (...) 中的无效语法尝试了一切
- php - PHP:xpath 替换内容标签
- data-conversion - 如何在 python 3.7 中将 ascii 字符串更改为十六进制,反之亦然?
- javascript - Next Js 中的子路由
- c - 在 C 中的网格上移动对象
- css - 一个 SVG 类悬停可以影响另一个 SVG 元素