PostgreSQL에서 초성 얻기

PostgreSQL에서 한글 단어에 대해 초성을 얻는 방법입니다.

prepare 초성(text) as 
  select case octet_length($1::char(1)) when 3 then 
    case ((((get_byte(decode($1::char(1), 'escape'), 0) & 15) << 12) 
    | ((get_byte(decode($1::char(1), 'escape'), 1) & 63) << 6) 
    | ((get_byte(decode($1::char(1), 'escape'), 2) & 63))) - 44032) / 588 
      when  0 then E'\xe3\x84\xb1' 
      when  1 then E'\xe3\x84\xb2' 
      when  2 then E'\xe3\x84\xb4' 
      when  3 then E'\xe3\x84\xb7' 
      when  4 then E'\xe3\x84\xb8' 
      when  5 then E'\xe3\x84\xb9' 
      when  6 then E'\xe3\x85\x81' 
      when  7 then E'\xe3\x85\x82' 
      when  8 then E'\xe3\x85\x84' 
      when  9 then E'\xe3\x85\x85' 
      when 10 then E'\xe3\x85\x86' 
      when 11 then E'\xe3\x85\x87' 
      when 12 then E'\xe3\x85\x88' 
      when 13 then E'\xe3\x85\x89' 
      when 14 then E'\xe3\x85\x8a' 
      when 15 then E'\xe3\x85\x8b' 
      when 16 then E'\xe3\x85\x8c' 
      when 17 then E'\xe3\x85\x8d' 
      when 18 then E'\xe3\x85\x8e' 
      when -53 then $1::char(1) 
      else '??' 
    end 
  else $1::char(1) 
end as initial; 

실행은 execute 명령을 활용하며 예를 들어 아래와 같습니다.

execute 초성('가나다');

결과는 'ㄱ'으로 나옵니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다