반응형

일을 하던 도중

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 의 개수를 늘이셔서 사용하시면 됩니다.



반응형

+ Recent posts