concat, concat_ws

Created by
  • 서경태
Created at
sql 코드카타를 풀던 중 출력하는 내용을 조작하는 문제를 받았다.
주소와 전화번호가 아래와 같이 주어질 경우 (from shipment_table)
city : 성남시
address1 : 분당구 수내로 13
address2 : A동 1107호
tlno : 01053422914
전화번호는 하이픈(-)을 넣고 주소는 city, address1, address2를 합쳐 전체 주소를 출력하라고 한다.
이때 concat을 사용해 문자열을 결합할 수 있지만 뒤에 _ws를 붙여 concat_ws를 사용하면 좀 더 간단하게 쿼리문을 작성할 수 있다.
concat
주어진 여러 문자열을 단순히 결합한다.
select concat(city, address1, address2) as full_address concat(substr(1,3), '-', substr(4,4), '-', substr(8,4)) as tlno from shipment_table
substr은 문자의 일부를 추출하는 함수다. 전화번호를 보기 편하게 010 5342 2914로 보여주기위해 3,4,4, 단위로 추출하고 중간에 하이픈(-)을 넣어 concnat으로 결한한다.
#출력문 full_address: 성남시분당구 수내로 13A동 1107호 tlno: 010-5342-2914
사실 이렇게만 작성해도 문제가 되지 않지만 주소를 보면 띄어쓰기가 불편하다.
concat_ws를 사용하면 보기에도 편하고 쿼리문도 좀 더 간편하게 작성할 수 있다.
concat_ws
뒤에 붙은 ws는 with separator의 약자로 첫번째 인수를 구분자로 사용해 나머지 인수들을 결합한다. 그리고 구분자를 각 문자열 사이에 삽입한다.
select concat_ws(' ', city, address1, address2) as full_address concat_ws('-', substr(1,3) , substr(4,4), substr(8,4)) as tlno from shipment_table
전체주소를 출력하기 위해 concat_ws를 사용하고 첫번째 인자로 white space를 넣어서 띄어쓰기를 만들어준다. 그리고 전화번호에선 3,4,4 단위마다 하이픈(-)을 넣는 대신 맨 앞에 구분자로 하이픈(-)을 넣어 간결하게 작성해줬다.
#출력문 full_address: 성남시 분당구 수내로 13 A동 1107호 tlno: 010-5342-2914
주소의 경우 각 인자마다 띄어쓰기가 들어가 한눈에 보기 편하다.
concat으로 처리해야하는 쿼리문이 길다면 concat_ws를 사용해 간결하게 작성해보자.