반응형
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 |