ORACLE 字串按分隔符分割成多列

2021-10-04 16:28:24 字數 1441 閱讀 7000

參考很多博文,發現都沒有想要的,無奈之下,自己動手,豐衣足食,廢話不多說,一下是需求:

資料:小明、小白、小張、小陳

目標:列數根據字串動態生成

構建plsql函式:

create or replace function f_new_rowit(in_text varchar2,--要擷取的字串

fh varchar2,--擷取識別符號

n number)--按第幾個符號擷取

return varchar2 is

result varchar2(4000);

begin

if n > 1 then

select substr(in_text,

decode(instr(in_text, fh, n - 1, n - 1),

0,0,

instr(in_text, fh, n - 1, n - 1) + 1),

decode(sign(instr(in_text, fh, n, n) -

instr(in_text, fh, n - 1, n - 1)),

1,(instr(in_text, fh, n, n) -

instr(in_text, fh, n - 1, n - 1)) - 1,

-1,length(in_text),

0,0)

)into result

from dual;

else

select substr(in_text, 0, instr(in_text, fh, 1, 1) - 1)

into result

from dual;

end if;

return(result);

end f_new_rowit;

成果展示:

--指令碼 f_new_rowit(字串,擷取識別符號,第幾次擷取)

select f_new_rowit('小明、小白、小張、小陳','、',1) 第1列,

f_new_rowit('小明、小白、小張、小陳','、',2) 第2列,

f_new_rowit('小明、小白、小張、小陳','、',3) 第3列,

f_new_rowit('小明、小白、小張、小陳','、',4) 第4列,

f_new_rowit('小明、小白、小張、小陳','、',5) 第5列,

f_new_rowit('小明、小白、小張、小陳','、',6) 第6列

from dual;

執行結果:

總結:此方法可根據實際情況增加列數(第n列),如果不能確定有多少列,最好先求出字串中擷取識別符號的個數

Oracle 根據分隔符分隔字串

為了讓pl sql 函式返回資料的多個行 必須通過返回乙個 ref cursor 或乙個資料集合來完成 ref cursor 的這種情況侷限於可以從查詢中選擇的資料 而整個集合在可以返回前 必須進行具體化 oracle 9i 通過引入的管道化表函式糾正了後一種情況 表函式是返回整個行的集 通常作為乙...

python字串分割,保留分隔符

這樣的 在裡面填寫分隔符,不會保留分隔符。import re a 你在北京 我 你是誰?在幹嘛 sentences re.split r s a print sentences 結果 你在北京 我 你是誰 在幹嘛 想要保留分隔符,需要加入 就是 這樣就會保留分隔符 import re a 你在北京 ...

字串按特定分隔符反轉

阿里巴巴的實習生筆試題,實現將字串按特定分隔符進行反轉,如 www.taobao.com 反轉後為 com.taobao.www 要求時間複雜度為o n 空間複雜度為o 1 解題思想 用兩個指標記錄分隔符之間的子字串,然後先將子字串進行反轉,逐段全部反轉後,再將整個字串進行一次反轉。cpp view...