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 초성('가나다');

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

대한민국의 아름다운 영토, 독도

당연하다고 생각되는 것도, 상대가 인정하지 않는다면 제3자는 누가 진실을 이야기 하는지 알 수 없습니다. 지금은 우리가 분명이 알고 있는 사실이지만, 긴 시간이 지나 지금의 우리가 존재하지 않을 때, 우리가 아닌 제3자가 알고 있는 것이 진실이 될 수 있기 때문입니다. 또 이렇게 된다면 우리의 후대 역시 외곡된 것을 진실이라고 믿게 될 수 있습니다. 상식이라고 하여 말하지 않아도 당연한 것도 때론 강하게 주장하여 옳은 것이라는 것을 따져 물어야 할 때도 분명 있습니다.