[pgsql-jp: 28758] Re: 文字列の部分的更新

Mashiki mashiki @ yanah.com
2003年 1月 24日 (金) 18:41:29 JST


 Mashikiです。

>>とAABBCCC000のBBだけをEEに変換する場合は
>>どのようにすればよいのでしょうか?
>
>http://www.postgresql.jp/document/pg721doc/user/functions-string.html
>
>select translate('aabbcc','b','e');
> translate 
>-----------
> aaeecc
>

7.3以降であれば replace 関数も使えます。

update テーブル名 set 列名 = replace(列名, 'BB', 'EE');


7.2.xまでは以下のような関数を作って実行してました。

/* Replace関数 */
 create  or replace function Replace(varchar, varchar, varchar) returns 
varchar as
 '
 DECLARE
   sTarget ALIAS FOR $1;
   sFrom ALIAS FOR $2;
   sTo ALIAS FOR $3;
   iPos integer;
   lenFrom integer;
   sWork varchar;
   sResult varchar;
 BEGIN
   sWork := sTarget;
   sResult := '''';
   lenFrom := length(sFrom);
   LOOP
     iPos := position(sFrom in sWork);
     IF iPos = 0 THEN
       return sResult||sWork;
     END IF;
     sResult := sResult||substring(sWork from 1 for iPos-1)||sTo;
     sWork := substring(swork from iPos+lenFrom);
   END LOOP;
 END;
 '
 language 'plpgsql'
 with (isstrict)
;



pgsql-jp メーリングリストの案内