[Postgresql] concat_ws 문자열 합치기 (코드 리팩토링)

concat, concat_ws

concat, concat_ws을 활용하면 테이블의 각 칼럼의 값들을 합쳐서 한번에 조회 가능하다.

  • concat: 칼럼의 값들을 하나의 문자열로 합쳐준다.
  • concat_ws: 칼럼의 값들을 구분자를 포함하여 하나의 문자열로 합쳐준다. (ws = with separator)

아래는 concat_ws를 사용해서 실제로 코드도 간결해지고 코드수도 줄인 예시다.

수정 전 쿼리

const query = `
   select si, gu_parent, gu_child, dong from region;
`;
const res = await client.query(query);
const data = res.rows[0];
let address;
if (data.gu_child) {
    address = `${si} ${gu_parent} ${gu_child} ${dong}`; // 경기도 성남시 분당구 판교동
} else {
    address = `${si} ${dong}`; // 세종특별자치시 보람동
}

수정 후 쿼리

const query = `
   select concat_ws( ' ', si, gu_parent, nullif(gu_child, ''), dong) as address from region;
`;
const res = await client.query(query);
const data = res.rows[0];
const address = data.address; // 경기도 성남시 분당구 판교동, 세종특별자치시 보람동

concat_ws를 사용해서 si, gu_parent, gu_child, dong 4개 칼럼의 값들을 합쳤고 중간에 ‘ ‘ 띄어쓰기 구분자를 넣어줬다.
concat_ws는 또한 null인 값은 제외하고 값을 합쳐주기에 별도 예외처리가 필요없다.


쿼리단에서의 전처리 장점과 유의할점

쿼리를 사용하는 환경이라면 쿼리를 불러올 때 처리 가능한 연산들은 처리해주면 좋다.
문자열, 숫자, Date 등 웬만한 연산들은 쿼리단에서 끝나는 것들이 많다.

쿼리단 전처리 장점

  • 상위 수준의 코드가 간결해지고 가독성이 좋아진다.
  • 코드가 간결해지니 에러가 줄어든다.
  • db에서 처리하는게 속도면에서 빠르다.

유의할 점

  • 재사용성이 좋지 않을 수 있다. ORM을 사용하는 환경에서는 맞지 않을 수 있다.
  • 너무 복잡한 쿼리는 가독성도 좋지 않다.

댓글남기기