LYWILL设计运营 - 网站运营与推广、开发技术、成功项目展示。

oracle中如何查询一个字符串包含另一个字符串

工作中遇到一个问题,需要查询出包含某些文字的联赛,在网上找到了解决办法:

SQL代码
  1. select * from league l where instr(l.league_name,'英格兰')>0  

下面是网上找到的资料:

有一个数据表中两个字段A和B,都是字符型,查询A字符串中包含B字符串中所有的字符的记录。
例如: A字段值为abcd   ,B字段值为bc或者ac 或者bd或者acd等都可,B中不能含有A中不存在的字符。

SQL代码
  1. select * from a where instr(a,b)>0;  
这个只能实现B字段是A字段中的某一部分的时候,如果想要不论顺序或者不相邻的字符时,定义函数可以实现: 
SQL代码
  1. create or replace function checks(v_a varchar2,v_b varchar)   
  2.  return number   
  3.  as  
  4.     num number;   
  5.     cou number;   
  6.  begin  
  7.     num := -1;   
  8.     cou:=0;   
  9.     for i in 1..length(v_b) loop   
  10.        if instr(v_a,substr(v_b,i,1))>0 then  
  11.     cou:=cou+1;   
  12.        end if;   
  13.     end loop;   
  14.     if cou=length(v_b) then  
  15.     return cou;   
  16.     end if;   
  17.     dbms_output.put_line(cou||'    '||length(v_b));   
  18.  return num;   
  19.  end;  
结果:
SQL代码
  1. SQL> select * from a;   
  2.   
  3. A          B   
  4. ---------- ----------   
  5. asdf       sd   
  6. asdf       ad   
  7. asdf       df   
  8. asdf       asdf  
SQL代码
  1. SQL> select * from a where checks(a,b)>0;   
  2.   
  3. A          B   
  4. ---------- ----------   
  5. asdf       sd   
  6. asdf       ad   
  7. asdf       df   
  8. asdf       asdf  
 

 

标签: 数据库oracle

作者:lywill 分类:开发技术 浏览:2943 评论:0