加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

当字段内有逗号分隔时,Oracle如何对这些字段值进行分组

发布时间:2020-12-12 14:58:12 所属栏目:百科 来源:网络整理
导读:CREATE TABLE info( users varchar (100) ); INSERT INTO info VALUES ( 'userA@userB@userC' ); 'userB@userC@userD' ); 'userC@userD@userE' ); COLUMN "用户" FORMATA15 SELECT to_char(strvalue) as , count (*) AS "用户数" FROM info, table (fn_split
CREATETABLEinfo(usersvarchar(100));INSERTINTOinfoVALUES('userA@userB@userC');'userB@userC@userD');'userC@userD@userE');COLUMN"用户"FORMATA15SELECTto_char(strvalue)as,count(*)AS"用户数"FROMinfo,table(fn_split(info.users,'@'))GROUPBYto_char(strvalue)ORDERBY1;用户用户数-------------------------userA1userB2userC3userD2userE1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 Oracle需要首先在数据库中,创建好类型与函数。来实现一个split功能的处理。--定义一个对象类型.CREATEORREPLACETYPEty_row_str_splitasobject(strValueVARCHAR2(4000));/--定义一个表/数组类型,内容是前面定义的那个对象.TYPEty_tbl_str_splitISTABLEOFty_row_str_split;/----------------------字符分割函数.--参数1:被分割的源字符串--参数2:用于拆分的字符串。--------------------REPLACEFUNCTIONfn_split(p_strINVARCHAR2,p_delimiterVARCHAR2)RETURNty_tbl_str_splitISjINT:=0;i:=1;--被分割的源字符串的长度.len:=0;--分隔字符串的长度len1:=0;--暂存的中间每一个单元的文本信息.strVARCHAR2(4000);--预期返回结果.str_splitty_tbl_str_split:=ty_tbl_str_split();BEGIN--被分割的源字符串的长度.len:=LENGTH(p_str);--分隔字符串的长度.len1:=LENGTH(p_delimiter);--遍历被分割的源字符串.WHILEj<lenLOOP--在被分割的源字符串中,查询分隔字符串.j:=INSTR(p_str,p_delimiter,i);IFj=0THEN--j=0意味着没有找到.--可以理解为是查询到最后一个单元了.--设置j:=len,让外部的循环处理可以结束了.j:=len;--获取最后一个单元的内容.str:=SUBSTR(p_str,i);--结果追加一行.str_split.EXTEND;--设置结果内容.str_split(str_split.COUNT):=ty_row_str_split(strValue=>str);IFi>=lenTHENEXIT;ENDIF;ELSE--如果在被分割的源字符串中,找到了分隔字符串.--首先,获取分割的内容.--然后设置索引,下一次再查找的时候,从指定的索引位置开始(不是从0开始找了)i:=j+len1;--结果追加一行.str_split.EXTEND;--设置结果内容.):=ty_row_str_split(strValue=>str);IF;LOOP;str_split;fn_split;/函数创建完毕以后,可以开始做查询的处理.SQL>selectValuefrom(fn_split('aa,bb,cc'','));VALUE-------------------------------------------------------------------------------aabbcc

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读