要求:
我现在有一个白名单表
id type keyword
4788 01 4
4790 01 5
4792 01 6
4794 01 7
4798 01 9
4968 03 娃娃鱼
4781 01 1
4783 01 人力资源
4785 01 3
4938 02 嘻嘻哈哈
4417 03 pdf
4423 01 哈哈
5702 03 拉拉
2941 02 焦点切换(关键字)
1 01 CTAIX
1656 03 国税
5032 02 切换
5788 01 kayi
现在我需要判断 我的数据是否与 keyword字段中的 匹配
比如 我有一个数据 '人力资源管理制度.doc' 我如何去写sql 去 取出 表中4783 01 人力资源 记录呢?
解答:
具体语句如下:
select id,
type,
keyword
from
(select id,
type,
keyword,
dense_rank() over(order by length(&inputstr) - length(replace((translate(&inputstr, keyword, ' ')), ' ', '')) desc) rn
from REC_APP_FOCUS)
where rn = 1;
举例如下:
SQL> select * from REC_APP_FOCUS;
ID TYPE KEYWORD
---------- -------------------- ------------------------------
4783 01 人力资源
4785 01 人力
4788 01 4
4968 03 娃娃鱼
1 01 CTAIX
--&inputstr = '人力资源管理制度.doc'
SQL> select id,
2 type,
3 keyword
4 from
5 (select id,
6 type,
7 keyword,
8 dense_rank() over(order by length('人力资源管理制度.人力doc') - length(replace((translate('人力资源管理制度.人力doc', keyword, ' ')), ' ', '')) desc) rn
9 from REC_APP_FOCUS)
10 where rn = 1;
ID TYPE KEYWORD
---------- -------------------- ------------------------------
4783 01 人力资源