이미지09
Coding Story/DATABASE

[ MySQL ] 문자열 사이에 구분자 넣어 조회하기

반응형

 

 

 

이번 게시글에선 MySQL 에서 SELECT 할 때 조회 된 데이터들 사이에 구분자 ( , ) 를 넣어 조회해보도록 하겠다.

 

 

 

 

필자는 뚱이, 홍길동, 코난이 각각 과일을 얼마나 먹었는지가 궁금하다고 가정했다.

 

아래와 같은 TB_TEST 테이블이 있다고 가정해보자.

 

 

FRUIT 컬럼을 보면 뚱이는 bbbbb, 홍길동은 aaabb, 코난은 abaaa 데이터가 들어가 있다.

 

무엇을 하고 싶었냐면 저 알파벳 5 자리의 의미는 아래와 같다.

 

1 번째 자리 : 사과

2 번째 자리 : 딸기

3 번째 자리 : 바나나

4 번째 자리 : 파인애플

5 번째 자리 : 키위

 

필자는 각 자리에 a 가 들어가 있다면 이 과일을 먹지 않은 것이고 b 가 들어가 있다면 이 과일을 먹었다고 가정했다.

 

예를 들어 aabab 라면? 3 번째 자리와 5 번째 자리가 b 이기에 바나나와 키위를 먹은 것이다.

 

이러한 가정을 전제로 삼아 본론의 주제인 MySQL의 문자열과 구분자 합쳐서 조회하기를 해보도록 하자.

 

 

 

MySQL 에서는 CONCAT 과 CONCAT_WS 라는 명령어를 지원한다.

 

CONCAT은 조회되는 데이터들을 합쳐서 조회해주고,

 

CONCAT_WS는 조회되는 데이터들을 합쳐서 조회해주지만 구분자를 넣어 조회해준다.

 

그 중 필자가 필요한 CONCAT_WS를 사용해보자

SELECT NM, 
       CONCAT_WS(',',(CASE WHEN (SUBSTR(FRUIT, 1, 1) = 'b') THEN '사과' END),
                     (CASE WHEN (SUBSTR(FRUIT, 2, 1) = 'b') THEN '딸기' END), 
                     (CASE WHEN (SUBSTR(FRUIT, 3, 1) = 'b') THEN '바나나' END), 
                     (CASE WHEN (SUBSTR(FRUIT, 4, 1) = 'b') THEN '파인애플' END),
                     (CASE WHEN (SUBSTR(FRUIT, 5, 1) = 'b') THEN '키위' END)
                )AS FRUIT
  FROM TB_TEST;

 

CASE 문을 사용했으며 SUBSTR를 통해,

 

각 첫 번째 글자부터 다섯 번째 글자까지 잘라 'b' 이면 과일을 내보냈다.

 

그럼 결과는? 아래와 같다.

 

 

 

반응형