728x90
반응형
일을 하던 도중
MySQL 에서 한 문자열에 여러개의 구분자가 있을 때,
예를 들면
'동해물과;백두산이;마르고;닳도록;하느님이;보우하사;우리나라;만세'
이런 테이블이 있다고 가정했을 때
1절 |
동해물과;백두산이;마르고;닳도록;하느님이;보우하사;우리나라;만세 |
2절 |
남산위에;저소나무;철갑을;두른듯;바람서리;불변함은;우리;기상일세 |
3절 |
가을하늘;공활한데;높고;구름없이;밝은달은;우리가슴;일편;단심일세 |
4절 |
이기상과;이맘으로;충성을;다하여;괴로우나;즐거우나;나라;사랑하세 |
후렴 |
무궁화;삼천리;화려강산;대한사람;대한으로;길이;보전하세 |
1절 |
동해물과 |
1절 |
백두산이 |
1절 |
마르고 |
1절 |
닳도록 |
1절 |
하느님이 |
1절 |
보우하사 |
1절 |
우리나라 |
1절 |
만세 |
2절 |
남산위에 |
2절 |
저소나무 |
.
.
.
이런식으로 나누는 쿼리를 짜고 싶었습니다.
구글링을 해 본 결과
https://yamea-guide.tistory.com/88
이분의 블로그를 참고하였습니다.
저 위의 테이블이 akukka 이고
컬럼명이 JUL, VERSE 라고 할 때
1 2 3 4 5 6 7 8 9 10 11 12 13 | select SUBSTRING_INDEX (SUBSTRING_INDEX(akukka.VERSE,';',numbers.n),';',-1) 컬럼명 from (select 1 n union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9 union all select 10) numbers INNER JOIN 테이블명 on CHAR_LENGTH ( akukka.VERSE ) - CHAR_LENGTH ( REPLACE ( akukka.VERSE , ';' , '' ))>= numbers . n-1 -- 공백을 제거하기 위한 조건절 -- WHERE SUBSTRING_INDEX ( SUBSTRING_INDEX ( akukka.VERSE , ' ' , numbers . n ), ' ' , -1 ) != ' ' ; | cs |
이런 코드를 사용하여 주시면 됩니다.
저 union all 의 개수를 이용하여 구분자의 개수를 더 늘릴수도 있는데
혹시 구분자의 개수가 10개를 넘어간다면
union all 의 개수를 늘이셔서 사용하시면 됩니다.
728x90
반응형