3 回答

TA貢獻1796條經驗 獲得超4個贊
為什么要用自定義函數呢?一個簡單的replace函數就能解決你的問題
select replace(列名,',',chr(10)) from table;
當然,如果你要用函數也不是不行。
create or replace function split_char
(
p_string varchar2
) is
v_sql varchar2(32000);
return varchar2
begin
------- 這里加上對傳入參數的類型的校驗。如果不是varchar2類型則跑出異常
v_sql:=replace(p_string,',',char(10));
return v_sql;
end;
大概就是這樣子。由于手頭上沒環境 只能寫個大概的 希望對你有所幫助

TA貢獻1815條經驗 獲得超13個贊
"select 自定義函數(列名) from 表名" 只會返回一行記錄,而不是你要的多行. 不用自定義函數,你可以參照我寫的例子:
select substr(x.col_1,x.pos1,x.pos2-x.pos1-1)
from (
select
t.col_1,
level as lv,
instr(','||t.col_1||',',',',1,level) as pos1,
instr(','||t.col_1||',',',',1,level+1) as pos2
from zclsys.test2 t
connect by level <= (length(t.col_1) - length(replace(t.col_1, ',', '')))+1
) x; ---t.col_1為有逗號分隔的那列

TA貢獻1886條經驗 獲得超2個贊
剛好以前寫過一個SQL Server的拆分字符串,你參考下,不過我沒有用作函數:
declare @T table (sortid int,mychar varchar(10))
declare @i int
declare @str varchar(20)
set @str = '1,3,11,5,20'
set @i = 1
while charindex(',',@str) > 0
begin
insert into @T values(@i, substring(@str,1,charindex(',',@str)-1))
set @str = substring(@str,charindex(',',@str)+1,len(@str))
set @i = @i + 1
end
insert into @T values(@i, @str)
select * from @T
---結果---------------
sortid mychar
----------- ----------
1 1
2 3
3 11
4 5
5 20
(5 row(s) affected)
- 3 回答
- 0 關注
- 666 瀏覽
添加回答
舉報