oracle中如何查询一个字符串包含另一个字符串
工作中遇到一个问题,需要查询出包含某些文字的联赛,在网上找到了解决办法:
SQL代码
- select * from league l where instr(l.league_name,'英格兰')>0
下面是网上找到的资料:
有一个数据表中两个字段A和B,都是字符型,查询A字符串中包含B字符串中所有的字符的记录。
例如: A字段值为abcd ,B字段值为bc或者ac 或者bd或者acd等都可,B中不能含有A中不存在的字符。
SQL代码
- select * from a where instr(a,b)>0;
这个只能实现B字段是A字段中的某一部分的时候,如果想要不论顺序或者不相邻的字符时,定义函数可以实现:
SQL代码
- create or replace function checks(v_a varchar2,v_b varchar)
- return number
- as
- num number;
- cou number;
- begin
- num := -1;
- cou:=0;
- for i in 1..length(v_b) loop
- if instr(v_a,substr(v_b,i,1))>0 then
- cou:=cou+1;
- end if;
- end loop;
- if cou=length(v_b) then
- return cou;
- end if;
- dbms_output.put_line(cou||' '||length(v_b));
- return num;
- end;
SQL代码
- SQL> select * from a;
- A B
- ---------- ----------
- asdf sd
- asdf ad
- asdf df
- asdf asdf
SQL代码
- SQL> select * from a where checks(a,b)>0;
- A B
- ---------- ----------
- asdf sd
- asdf ad
- asdf df
- asdf asdf