REGEXP_SUBSTR
- Oracle 10g부터 나온 기능
- REGEXP_SUBSTR(대상 문자, 패턴, 시작위치, 매칭순번)
- 예)
REGEXP_SUBSTR('A,01,02_03','[^,]+',1,1) -> A
REGEXP_SUBSTR('A,01,02_03','[^,]+',1,2) -> 01
REGEXP_SUBSTR('A,01,02_03','[^,]+',1,3) -> 02
REGEXP_SUBSTR('A,01,02_03','[^,]+',1,4) ->
- 패턴에서 (SQL 표준 정규 표현식을 사용하기 때문에 필요한 것들은 찾아서 만들어야 한다.)
https://developer-ek.tistory.com/38
^ : 문자열의 시작
[^] : 대괄호 안에 있기 때문에 not표현이 된다.
+ : 1회 또는 그 이상의 횟수로 일치
=> 예제 있는 패턴 [^,]+ 은 ,로 시작하지 않는 것으로 반복해서 잘라라..이런 뜻이라는데 이말은 도통 이해가 되지 않는다.. 이해하기 쉽게 생각하자면 ,를 구분자로 문자를 잘라라..정도로 이해했다.
https://docs.aws.amazon.com/ko_kr/redshift/latest/dg/REGEXP_SUBSTR.html
https://good4uprin.tistory.com/11
https://jack-of-all-trades.tistory.com/386
LEVEL , CONNENCT BY
- CONNECT BY LEVEL쿼리는 계층형 쿼리로 오라클에서 값을 연속적으로 증가하는 값이 필요할 때 사용한다.
- for문과 비슷한데..
SELECT LEVEL
FROM DUAL
CONNECT BY LEVEL < 10; 하면 1~9까지의 데이터가 생긴다.
- LEVEL데이터를 가지고 연산을 통해 필요한 데이터를 만들 수도 있을 것 같다.
- LEVEL : 오라클에서 실행되는 모든 쿼리 내에서 사용한 가상의 열이다. 트리 내에서 어떤 LEVEL에 있는지를 나타내는 정수값이다.
- CONNECT BY절 : 연결 고리를 가지고 목록을 가져온다.
각 행이 어떻게 연결되는지 오라클에게 알려주는 역할을 한다. 계층 구조 내에서 각 행의 관계를 설정하는 것이다. => 이게 잘 이해가 안감..
https://loveuceci.tistory.com/1226
INSTR
INSTR(문자열, 찾을 문자값, 찾기 시작할 위치, 찾은결과의 순번)
- INSTR함수는 찾는 문자의 위치(찾는 단어 앞글자의 인덱스)를 반환한다.
- 찾는 문자가 없으면 0을 반황
- 찾기 시작할 위치가 양수이면 왼->오 / 찾기 시작할 위치가 음수이면 오 -> 왼 방향으로 진행된다.
https://rimkongs.tistory.com/172
SELECT REGEXP_SUBSTR('가,나,다' , '[^,]+' , 1 , LEVEL) TESTTEXT
FROM DUAL
CONNECT BY INSTR('가,나,다' , ',' , 1 , LEVEL -1) > 0 ;
이라는 쿼리가 있다면 실행했을 때
TESTTEXT |
가 |
나 |
다 |
로 출력된다.
- CONNECT BY절에서 > 0 부분이 계속 궁금했는데 >= , < , = 등..연산자가 꼭 필요한 것 같다.
- 근데 계속 이해가 안가는게 레벨은 1,2,3이고.. INSTR에 레벨-1하면 0이 나오는데.. 0보다 크다는 조건이 어떻게 성립이 되는지 모르겠고... LEVEL-1이 부분이 찾은 문자열이 여러개일 경우에 몇번째 문자열인지 적는 부분이라는데.. 0번째 문자열은 뭐지.. 이해가 안감..
+ 팀장님께 질문드렸는데
- CONNECT BY는 대체로 관리가 어렵고 속도도 느리기 때문에 잘 쓰이질 않는다고 한다.
- 오라클 11g 이상에서는 select를 서브 쿼리로 한 단계씩 불러오도록 만드는 것이 더 낫다.
'차근차근 > Oracle' 카테고리의 다른 글
[Oracle] FETCH 구문 사용하기 (0) | 2022.06.03 |
---|---|
tnsnames.ora파일 (0) | 2022.05.19 |
NEXTVAL , CURRVAL (0) | 2022.03.31 |
Oracle count(*) count(1) count(컬럼명) (0) | 2022.03.28 |
ROWID (0) | 2022.03.25 |