--去除数据中的空格(>=1),用逗号替换

--去除数据中的空格(>=1),用逗号替换

/*本例子针对http://www.itpub.net/showthread.php?s=&threadid=608001&perpage=10&pagenumber=1*/

create or replace function f_replace (str in varchar2) return varchar2
as
space_counter number(18,0) default 0;
str_out varchar2(2000);
begin
for i in 1..length(str) loop
if ascii(substr(str,i,1)) != 32 then
space_counter := 0;
str_out := str_out||substr(str,i,1);
else
space_counter := space_counter + 1;
if space_counter = 1 then
str_out := str_out || ',';
end if;
end if;
end loop;
return str_out;
end;
/

select f_replace(ltrim(rtrim(' aa bb cc dd ee '))) from dual;

select 'aa'||chr(32)||chr(32)||'bb'||chr(32)||chr(32)||chr(32)||'cc' from dual;

select f_replace(ltrim(rtrim(chr(32)||'aa'||chr(32)||chr(32)||'bb'||chr(32)||chr(32)||chr(32)||'cc'||chr(32)||chr(32)) ))from dual;

为了简化函数内容,没有把trim加入函数内,有兴趣的朋友可以考虑把trim功能提入函数中,这样就可以简化使用。

如果是oracle10g以上版本,用正则表达式是比较简洁的。

SELECT REGEXP_REPLACE('坐火车 去 西藏 玩 看 秀丽 山川','( ){2,}',',')

posted @ 2011-07-11 21:42  jex  阅读(268)  评论(0)    收藏  举报