日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Oracle 创建 split 和 splitstr 函数

發(fā)布時(shí)間:2024/9/20 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle 创建 split 和 splitstr 函数 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Sql語句最好依次執(zhí)行創(chuàng)建

/**************************************
?* name:? ? ? ? split
?* author:? ? ? sean zhang.
?* date:? ? ? ? 2012-09-03.
?* function:? ? 返回字符串被指定字符分割后的表類型。
?* parameters:? p_list: 待分割的字符串。
? ? ? ? ? ? ? ? p_sep: 分隔符,默認(rèn)逗號,也可以指定字符或字符串。
?* example:? ? select * from users where u_id in (select column_value from table (split ('1,2')))
? ? ? ? ? ? ? ? 返回u_id為1和2的兩行數(shù)據(jù)。
?**************************************/
/* 創(chuàng)建一個(gè)表類型 */
create or replace type tabletype as table of varchar2(32676)

/* 創(chuàng)建 split 函數(shù) */
create or replace function split (p_list clob, p_sep varchar2 := ',')
? return tabletype
? pipelined

is
? l_idx? ? pls_integer;
? v_list? varchar2 (32676) := p_list;
begin
? loop
? ? ? l_idx? := instr (v_list, p_sep);

? ? ? if l_idx > 0
? ? ? then
? ? ? ? pipe row (substr (v_list, 1, l_idx - 1));
? ? ? ? v_list? := substr (v_list, l_idx + length (p_sep));
? ? ? else
? ? ? ? pipe row (v_list);
? ? ? ? exit;
? ? ? end if;
? end loop;
end;

/**************************************
?* name:? ? ? ? splitstr
?* author:? ? ? sean zhang.
?* date:? ? ? ? 2012-09-03.
?* function:? ? 返回字符串被指定字符分割后的指定節(jié)點(diǎn)字符串。
?* parameters:? str: 待分割的字符串。
? ? ? ? ? ? ? ? i: 返回第幾個(gè)節(jié)點(diǎn)。當(dāng)i為0返回str中的所有字符,當(dāng)i 超過可被分割的個(gè)數(shù)時(shí)返回空。
? ? ? ? ? ? ? ? sep: 分隔符,默認(rèn)逗號,也可以指定字符或字符串。當(dāng)指定的分隔符不存在于str中時(shí)返回sep中的字符。
?* example:? ? select splitstr('abc,def', 1) as str from dual;? 得到 abc
? ? ? ? ? ? ? ? select splitstr('abc,def', 3) as str from dual;? 得到 空
?**************************************/
/* 創(chuàng)建 splitstr 函數(shù) */
create or replace function splitstr(str in clob,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? i? in number := 0,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? sep in varchar2 := ',') return varchar2 is
? t_i? ? number;
? t_count number;
? t_str? varchar2(4000);
begin
? if i = 0 then
? ? t_str := str;
? elsif instr(str, sep) = 0 then
? ? t_str := sep;
? else
? ? select count(*) into t_count from table(split(str, sep));
? ? if i <= t_count then
? ? ? select str
? ? ? ? into t_str
? ? ? ? from (select rownum as item, column_value as str
? ? ? ? ? ? ? ? from table(split(str, sep)))
? ? ? where item = i;
? ? end if;
? end if;

? return t_str;
end;

示例:split(字符串,標(biāo)識)

select ?split('a,b,c,e,d,f,g') ?arrData ?from ?dual;

默認(rèn)使用逗號分割,可以自定義修改,如:select split('X-rapido & Lemon','&') arrData from dual;

點(diǎn)開集合

默認(rèn)使用逗號分割,可以自定義修改,如:select split('X-rapido & Lemon','&') arrData from dual;

示例:splitstr(字符串,獲取的節(jié)點(diǎn)下標(biāo),分隔符)

select splitstr('X-rapido&Lemon&Jennifer', 1, '&') word from dual; ?-- X-rapido
select splitstr('X-rapido&Lemon&Jennifer', 2, '&') word from dual; ?-- Lemon
select splitstr('X-rapido&Lemon&Jennifer', 3, '&') word from dual; ?-- Jennifer
select splitstr('X-rapido&Lemon&Jennifer', 4, '&') word from dual;??-- 空字符串

與50位技術(shù)專家面對面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的Oracle 创建 split 和 splitstr 函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。