oracle中一个字符串包含另一个字符串中的所有字符
有一个数据表中两个字段A和B,都是字符型
查询A字符串中包含B字符串中所有的字符 的记录
例如: A字段值为abcd ,B字段值为bc或者ac 或者bd或者acd等都可,B中不能含有A中不存在的字符。 展开
select * from a where instr(a,b)>0;
这个只能实现B字段是A字段中的某一部分的时候,
如果想要不论顺序或者不相邻的字符时,定义函数可以实现
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> select * from a;
A B
---------- ----------
asdf sd
asdf ad
asdf df
asdf asdf
SQL> select * from a where checks(a,b)>0;
A B
---------- ----------
asdf sd
asdf ad
asdf df
asdf asdf
做个过程处理(PL/SQL) select substr('A123456',2,6) from dual
如此截取
要是在JAVA中做处理的话 就用for循环控制 。charat()这个方法可以用哦
思路是这 下面靠自己动手啦! 多写写就会了
还有循环的时候有个简单点的 就是把两个字符串的每个字符都进行排序了 然后看是不子串
WHERE A LIKE '%'||B||'%'
2011-09-06