코드 짜는 티모

[SQL] 문자열 자르기 split하여 비교 본문

IT/DB

[SQL] 문자열 자르기 split하여 비교

나무뒤에티모 2018. 12. 15. 03:15
반응형


SQL 문자열 자르기 split하여 비교



어떠한 입력값이 , 를 기준으로 여러개의 데이터가 들어온다.


예를 들어 ' 3,34,356,3678'  와 같은 데이터를 입력받고


,를 기준으로 split(tokenize)하여 저 값과 일치하는 데이터를 추출하고 싶다.


프로그래밍 언어였다면 split이나 tokenizer를 사용하여 배열어 넣든 쉽게 구현할수 있다.


쿼리문으로는 substring을 해서 꺼낼 수 있겠지만 하나씩 가져와야한다. ( 좋은 방법은 아닌듯 하다. )


그래서 알아보니 계층구조와 level 을 사용하면 간단하게 구현이 가능하다.



1
2
3
SELECT    TRIM(REGEXP_SUBSTR(TXT, '[^,]+'1, LEVEL))
FROM    (SELECT RTRIM('3,34,356,3678',',') TXT FROM DUAL)
CONNECT BY REGEXP_SUBSTR(TXT, '[^,]+'1, LEVEL) IS NOT NULL)




예외처리로 ,를 많이 입력하는 경우


예를 들어  '3,,,,34,,,,,,,356,3678,,,,,,,,,' 와 같이 데이터를 입력받았을때



1
 SELECT REGEXP_REPLACE(RTRIM('3,,,,34,,,,,,,356,3678,,,,,,,,,',','),'[,]+',',') TXT FROM DUAL



와 같이 할려 했지만 어차피 


REGEXP_SUBSTR(TXT, '[^,]+'1, LEVEL


, 가 아닌 값들만 level 에 맞춰서 출력되기에 굳이 예외처리가 필요없을듯 하다.




,를 기준으로 입력받은 부서번호로 조회를 한다하면

where depno in ( 문자열 split 하는 쿼리문 ) 

과 같이 손쉽게 이용할 수 있다.






SQL 문자열 자르기 문자열 SPLIT 문자열 TOKENIZE

반응형
Comments