DataBase/Mysql

[MySql] mysql 다중 문자열 치환 - Replace & case 쿼리

민돌v 2022. 7. 21. 17:50
728x90

 

 

 

컬럼의 상태코드 값에 따라, 특정한 문자열로 치환해서 표현하라는 온보딩 과제를 받았습니다.

 

ex)  테이블의 CODE 는 상품 카테고리이다. 0은 사료, 1는 간식, 2은 영양제, 3는 용품 그외는 ETC로 표시하라.

 


 

조건에 따라 컬럼의 값을 여러 문자열로 치환해야하는 쿼리문을 작성해한다고 생각했습니다.

  1. 처음엔 Replace 를 생각했지만, 성능도 안나올 거 같고, 뭔가,,,, 뭔가 아닌거같다는 느낌적인 느낌이 들었습니다
  2. 그 뒤에 Mysql CASE WHEN 을 알게되어 문제를 해결하였습니다.

 

 


 

1. SQL REPLACE

특정 조건의 문자열을 단일 치환하는 기능을 수행하는 sql문 입니다.

특정 조건이니, 정규표현식도 가능합니다.

 

sql replace 사용방법 예시

select code, replace(code, '0', '사료') as 싱픔카테고리 from table;

 

 

sql replace 다중 문자열 치환 방법

replace 문은 단일 치환만을 제공해서, 중첩을 해야 다중 조건에 따른 문자열 치환이 가능합니다.

explain select code, replace(replace(replace(replace(code, '0', '사료'), '1', '간식'), '2', '영양제'), '3', '용품') as 싱픔카테고리
from table;

 

이렇게 중첩에중첩을 해야합니다.

 

하지만, 조건에 해당하는 '여기' 가 포함된 모든 문자열을 치환해서, 딱 코드에 해당하는 문자열 치환을 워했는데.

원하지 않는 결과가 나오기도 했습니다.

sql replace 는 조건에 해당하는 모든 문자열을 치환

 

가독성도 좋지않고 성능도 흠,,, 좋지않을것만 같은 느낌적인 느낌

 


 

2. SQL CASE 문

sql 에도 case 문을 사용할 수 있습니다. (sql case when then end 구조)

  • case : case 문 시작
  • when : 필터링 할 조건을 기술
  • then : 조건에 걸린 후 처리
  • else : 나머지
  • end : case 의 종료를 알림
select code,
       case
           when code = '0'
               then '사료'
           when code = '1'
               then '간식'
           when code = '2'
               then '영양제'
           when code = '3'
               then '용품'
           else 'ETC'
           end as 상품카테고리,
from table;

 

아주 깔꼼하게 다중 조건에 의한 다중 문자열 치환 쿼리를 완성했습니다!

반응형