您的位置:首页 > 数据库 > Oracle

Oracle SQL判断字符串是否在目标字符串中的函数

2018-01-21 12:56 381 查看
转自:http://dacoolbaby.iteye.com/blog/1772156

根据需求,写了一段方法。

用于识别以下的情况:

判断 字符串A 在用逗号分隔的字符串B中是否存在

如:

v_str_a = aa ;

v_str_b= aa,bb,dd,cc ;

如上,就返回Y,否则返回N。

添加了一些校验。

以后可以根据需求,按照指定的分隔符,提取字符串。

毕竟Oracle的字符串解析比较麻烦,能封装就封装。

1 create or replace function func_str_inArray(p_target    varchar2,
2                                             p_str_array varchar2)
3   return varchar2 is
4
5   v_flag        varchar2(1);
6   v_comma_loc   int;
7   v_cut_string  varchar2(300);
8   v_rest_string varchar2(2000);
9 begin
10   ------------------------
11   --p_target 不能包含","!!!注意!!
12   --info:这个函数用于识别目标字符串,是否在一串用“,”分开的字符串内
13   ------------------------
14   v_flag      := 'N';
15   v_comma_loc := instr(p_str_array, ',');
16
17   --如果是对比字符串是空,则返回false
18   if nvl(p_str_array, '') = '' then
19     return 'N';
20   end if;
21   --如果没有逗号,直接比较
22   if length(p_str_array) > 0 and v_comma_loc = 0 then
23     if p_target = p_str_array then
24       return 'Y';
25     else
26       return 'N';
27     end if;
28   end if;
29
30   v_rest_string := p_str_array;
31
32   while v_comma_loc > 0 loop
33     v_cut_string  := substr(v_rest_string, 0, v_comma_loc - 1);
34     v_rest_string := substr(v_rest_string,
35                             v_comma_loc + 1,
36                             length(v_rest_string) - 1);
37
38     if p_target = v_cut_string then
39       v_flag := 'Y';
40     end if;
41
42     v_comma_loc := instr(v_rest_string, ',');
43
44     if v_comma_loc = 0 and length(v_rest_string) > 0 then
45       if p_target = v_rest_string then
46         v_flag := 'Y';
47       end if;
48     end if;
49
50   end loop;
51
52   return v_flag;
53
54 end;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: