oracle中split成陣列

2021-09-01 07:29:03 字數 1716 閱讀 2437

create or replace type ty_str_split is table of varchar2 (4000);

create or replace function fn_split (p_str in varchar2, p_delimiter in varchar2)

return ty_str_split

is j int := 0;

i int := 1;

len int := 0;

len1 int := 0;

str varchar2 (4000);

str_split ty_str_split := ty_str_split ();

begin

len := length (p_str);

len1 := length (p_delimiter);

while j < len

loop

j := instr (p_str, p_delimiter, i);

if j = 0

then

j := len;

str := substr (p_str, i);

str_split.extend;

str_split (str_split.count) := str;

if i >= len

then

exit;

end if;

else

str := substr (p_str, i, j - i);

i := j + len1;

str_split.extend;

str_split (str_split.count) := str;

end if;

end loop;

return str_split;

end fn_split;

測試:

select * from table (cast (fn_split ('1;;12;;123;;1234;;12345', ';;') as ty_str_split));

結果:1

12123

1234

12345

如果我們查尋條件是這樣:100~200-100-200-200~300-200-300',

它表示,在100到200之間的,100在200到300之間的,200如果我們想進行 行轉列,可以使入如下語句

select max(case subject when 0 then rv else '0' end) as rangename ,max(case subject when 1 then rv else '0' end) as from_v,max(case subject when 2 then rv else '0' end) as to_v

from

(select column_value as rv ,trunc((rownum-1)/3) as name,mod(rownum-1,3) as subject from(

select * from table (cast (fn_split ('100~200-100-200-200~300-200-300', '-') as ty_str_split)))

) group by name

結果是這樣的:

100~200 100 200

200~300 200 300

js中通過split函式分割字串成陣列小例子

投稿 whsnow 字型 增加 分割字串成陣列的方法有很多,不過使用最多的還是split函式,接下來為大家介紹下它的具體使用方法,感興趣的朋友可以參考下 複製 如下 js中split的用法 複製 如下 js刪除陣列元素 var arr a b c 若要刪除其中的 b 有兩種方法 1.delete方法...

Oracle 實現 split 函式 返回陣列)

功能描述 用指定分隔符切割輸入的字串,返回一維陣列,每個陣列元素為乙個子串。源 create or replace type ty str split is table of varchar2 4000 create or replace function fn split p str in var...

給Oracle新增split和splitstr函式

最近專案中有很多需要做批量操作的需求,客戶端把一組逗號分隔的id字串傳給資料庫,儲存過程就需要把它們分割,然後逐個處理。以往的處理方式有如下幾種 1 在儲存過程內寫迴圈,逐個分析字串中的id,然後逐個處理。缺點 迴圈一次處理乙個,如果每次判斷都很多,效率將很受影響。適合每次處理要做單獨判斷的情況。2...