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

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

PostgreSQL의 timestamp 필드에 값 INSERT

PostgreSQL에서 년/월/일과 시간을 모두 저장할 수 있는 필드 타입인 timestamp에 값을 넣는 Java 코드입니다.

Calendar cal = Calendar.getInstance();
Timestamp timestamp = new Timestamp(cal.getTimeInMillis());

코드를 호출하는 시점에서의 시간 값을 얻어 오는 코드이고, 이를 INSERT 문으로 추가할때는 문자열 형태로 넣어 주면 됩니다. 즉, 아래처럼 말입니다.

Calendar cal = Calendar.getInstance();  
Timestamp timestamp = new Timestamp(cal.getTimeInMillis());

StringBuilder sb = new StringBuilder();

sb.append("INSERT INTO log (call_time)");
sb.append("VALUES (");
sb.append("'");
sb.append(timestamp);
sb.append("')");

log라는 테이블에 timestamp 필드 타입의 call_time 필드에 값을 저장하는 코드입니다.