DB/Mysql

Split처럼 특정 구분자를 기준으로 열에서 행으로 변환 (Mysql)

밍꿔 2020. 7. 22. 18:13


반응형

 

SELECT 			
	TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(TABLE_NAME.COLUMN, ',', NUMBERS.N), ',', -1)) AS VALUE 			
FROM  		
(
	SELECT 1 N UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5
) NUMBERS  		
INNER JOIN TABLE_NAME
ON CHAR_LENGTH(TABLE_NAME.COLUMN)-CHAR_LENGTH(REPLACE(TABLE_NAME.COLUMN, ',', ''))>=NUMBERS.N-1  	

 

select 1 union all 이하 절의 union all의 수만큼 구분자를 기준으로 행으로 변환 가능 하다 

 

예를 들어, 

 

순서 데이터
1 test1, test2, test3, test4, test5, test6

 

union all이 3번만 되었다면 데이터는

 

순서 데이터
1 test1
2 test2
3 test3

 

위와 같이 3개까지만 보여진다.

 

 

때문에 예외케이스가 존재한다면 위의 쿼리방식이 아닌 특정 함수를 만들어 제공하는것이 더 좋아보임.

 

(필자의 케이스는 업무적으로 최대수가 정해져 있었기 때문에 위와 같은 방식으로 진행.)

 

 

반응형

'DB > Mysql' 카테고리의 다른 글

[Mysql] DB Time_Zone 변경 (Docker)  (0) 2022.12.13
EXPLAIN 쿼리 실행계획  (0) 2019.12.24
group_concat_max_len 설정  (0) 2019.08.22