[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 メーリングリストの案内