問個(gè)SQL語句
字段里面的數(shù)據(jù)用逗號隔開的,想將他們轉(zhuǎn)化成單獨(dú)的列,語句怎么整
就是1,2,3,4,5
轉(zhuǎn)成
1
2
3
4
5大學(xué)的時(shí)候?qū)W過,現(xiàn)在我不會了。友情挽尊怒挽,求指教一個(gè)sql能搞定?這是多條記錄了吧,樓主寫個(gè)函數(shù)或過程轉(zhuǎn)吧。或者把整個(gè)問題貼出來
請百度 oracle split
一個(gè)sql能搞定?這是多條記錄了吧,樓主寫個(gè)函數(shù)或過程轉(zhuǎn)吧;蛘甙颜麄(gè)問題貼出來
一個(gè)表字段沒看懂什么意思。
是表里某個(gè)字段名稱 ,把里面用逗號隔開的字符當(dāng)做一個(gè)新字段,建張新表?
還是將查詢的結(jié)果集里,把用逗號分開的記錄再次拆分,形成新記錄?取到后臺用程序搞定不好么?就是某個(gè)字段 是1,2,3,4
然后要把她變成
字段 1
字段 2
字段 3
字段 4
對吧?
不會...
這個(gè)純SQL不知道咋實(shí)現(xiàn)
笨辦法是復(fù)制一個(gè)表
然后刪除這一列
然后把那個(gè)字段的對應(yīng)值提出來 用字符處理 把他們根據(jù)逗號分割
一個(gè)一個(gè)插進(jìn)去...
求高人解答 Post by lq307013304 (2012-07-24 12:53)
對,就是這個(gè)意思 Post by wushigan13 (2012-07-24 12:54)
純SQL
不知道怎么判斷逗號..而且也不知道怎么進(jìn)行復(fù)雜的邏輯..只能用SQL語句么- -PL/SQL 中沒有split函數(shù),需要自己寫。
create or replace type type_split as table of varchar2(50); --創(chuàng)建一個(gè)type,如果為了使split函數(shù)具有通用性,請將其size 設(shè)大些。
--創(chuàng)建function
create or replace function split
(
p_list varchar2,
p_sep varchar2 := ','
) return type_split pipelined
is
l_idx pls_integer;
v_list varchar2(50) := 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;
return;
end split;
測試:
SQL> select * from table(split('northsnow,塞北的雪',','));
COLUMN_VALUE
--------------------------------------------------
northsnow
塞北的雪
SQL>
-----PIPELINED關(guān)鍵字是什么意思?
---- pipe row是什么意思?
pipelined聲名此function是pipe的,如果這么聲名了,就必須使用pipe row的方式把數(shù)據(jù)返回,常規(guī)函數(shù)最后的"return 變量",就變成了"return".
pipelined的function主要是為了提高效率,不用等所有的數(shù)據(jù)都處理完成了才返回客戶端,它是邊處理邊返回.適用于大數(shù)據(jù)量的交互.上面有人提出oracle split
擼主如果你用oracle的話,用這個(gè)功能應(yīng)該可以實(shí)現(xiàn)用excel,分隔符分列,然后復(fù)制、選擇性粘貼,轉(zhuǎn)置,搞定
沒看懂什么意思。
是表里某個(gè)字段名稱 ,把里面用逗號隔開的字符當(dāng)做一個(gè)新字段,建張新表?
?
是這 個(gè)select substr(col,1,instr(col,',') as col from table樓上的真犀利
PL/SQL 中沒有split函數(shù),需要自己寫。
create or replace type type_split as table of varchar2(50); --創(chuàng)建一個(gè) type ,如果為了使split函數(shù)具有通用性,請將其size 設(shè)大些。
--創(chuàng)建function
create or replace function split
(
p_list varchar2,
p_sep varchar2 := ','
) return type_split pipelined
is
l_idx pls_integer;
v_list varchar2(50) := 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..
太深奧,我看看,多謝你要的是橫表轉(zhuǎn)縱表吧,我只會建中間表一點(diǎn)點(diǎn)倒過去