반응형
Notice
Recent Posts
Recent Comments
Link
코드 짜는 티모
[SQL] 문자열 자르기 split하여 비교 본문
반응형
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
반응형
'IT > DB' 카테고리의 다른 글
[ORACLE] ORA-01031 : insufficient privileges (0) | 2021.06.06 |
---|---|
[SQL]update datetype from java (0) | 2019.06.28 |
[SQL] 연속되는 문자 제거 (0) | 2018.12.15 |
[ORACLE] ORA-00911:문자가 부적합 합니다. (0) | 2018.12.08 |
[ORACLE] ORA-00942: 테이블 또는 뷰가 존재하지 않습니다 (0) | 2018.12.08 |
Comments