Archive

Archive for February, 2012

[PostgreSQL] string aggregation

February 8, 2012 Leave a comment

복수의 행 자료를 하나의 문자열로 변환하여 파일로 내보내는 경우 아래와 같은 방식으로 한다.

copy
(
select appno, string_agg(appno_sim, ',')
from sim_pat_54
group by appno
) to 'D:\test\string_agg_54.txt';

[PostgreSQL] Unicode normalization

February 2, 2012 Leave a comment

postgresql-plpython 설치

# yum install postgresql-plpython

쿼리 실행

CREATE LANGUAGE plpythonu;

CREATE OR REPLACE FUNCTION simplify (str text)
RETURNS text
AS $$
import unicodedata

s = unicodedata.normalize('NFKD', str.decode('UTF-8'))
s = ''.join(c for c in s if unicodedata.combining(c) == 0)
return s.encode('UTF-8')
$$ LANGUAGE plpythonu;

TEST

① select simplify(‘特許第2556636号(P2556636)’);

② select simplify(‘Français va à Paris, () {} [] µ @ º Ångstrøm
Phiat-im hû-hō sī phiat tī 1-ê ki-chhó· jī-bó bīn-téng ê hû-hō. Siōng
phó·-phiàn ê kong-lêng sī kái-piàn ki-chhó· jī-bó ê hoat-im.’);

출력결과

① “特許第2556636号(P2556636)”

② “Francais va a Paris, () {} [] μ @ o Angstrøm
Phiat-im hu-ho si phiat ti 1-e ki-chho· ji-bo bin-teng e hu-ho. Siong
pho·-phian e kong-leng si kai-pian ki-chho· ji-bo e hoat-im.”

[참고]
http://wiki.postgresql.org/wiki/Strip_accents_from_strings
http://wiki.postgresql.org/wiki/Strip_accents_from_strings,_and_output_in_lowercase

< 주의할 점! >

컬럼명을 인자로 전달할 때 where 절이 있으면 문제가 없으나, 그렇지 않은 경우 오류가 발생된다. 원인파악이 필요하다.

문제 없는 경우
select uninorm('문자열');
select uninorm(citn_no_original) from t_citn where citn_no_original is not null;

오류발생되는 경우
select uninorm(citn_no_original) from t_citn;
select uninorm(citn_no_original) from t_citn limit 100;