這個是字串分割函式的使用例子
select to_number(strvalue) as value from table(fn_split('1,2,3',','))
select to_char(strvalue) as value from table(fn_split('aa,bb,cc',','))
函式:
create or replace function root.fn_split(p_str in varchar2,
p_delimiter in varchar2)
return ty_tbl_str_split is
j int := 0;
i int := 1;
-- 被分割的源字串 的長度.
len int := 0;
-- 分隔字串的長度
len1 int := 0;
-- 暫存的中間每乙個單元的文字資訊.
str varchar2(4000);
-- 預期返回結果.
str_split ty_tbl_str_split := ty_tbl_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=0 意味著沒有找到.
-- 可以理解為是查詢到最後乙個單元了.
-- 設定 j := len, 讓外部的迴圈處理可以結束了.
j := len;
-- 獲取最後乙個單元的內容.
str := substr(p_str, i);
-- 結果追加一行.
str_split.extend;
-- 設定結果內容.
str_split(str_split.count) := ty_row_str_split(strvalue => str);
if i >= len then
exit;
end if;
else
-- 如果在被分割的源字串中,找到了 分隔字串.
-- 首先,獲取分割的內容.
str := substr(p_str, i, j - i);
-- 然後設定索引, 下一次再查詢的時候,從指定的索引位置開始(不是從0開始找了)
i := j + len1;
-- 結果追加一行.
str_split.extend;
-- 設定結果內容.
str_split(str_split.count) := ty_row_str_split(strvalue => str);
end if;
end loop;
return str_split;
end fn_split;
某列同值,合併另一列的值,並用逗號隔開
合併如圖所示的 一班 的同學名字到d列,名字之間以逗號分隔。ab cd1姓名 專業姓名2 專業22 張三語文 張三語文,數學,物理,生物3張三 數學4張三物理5張三 生物 d2的公式 substitute substitute phonetic offset a 1,match c2,a a,1,c...
一列資料轉多行多列
一列資料轉多行多列 方法二 插入行列公式 公式解析 row 的功能是返回引用的行號 column 的功能是返回引用的列號 indirect函式 功能 返回文字字串所指定的引用 語法規則 indirect ref text,a1 ref text 單元格引用,該引用所指向的單元格中存放有對另一單元格的...
excel中兩列匹配,取匹配列的後一列資料
剛在處理excel資料時,遇到如下問題 已知a列的英文名和b列的中文名,現有一批c列的英文名,想根據a b列的對應規則,輸出c列對應的中文名。但是c列的順序和a列順序不一致,也不一定所有內容都被包含在a列。舉例 a b c d prvnce name 省名稱 accs nbr latn name 本...