programing

regex_interval의 절로 연결

yellowcard 2023. 7. 9. 11:00
반응형

regex_interval의 절로 연결

나는 이 진술의 이해를 얻을 수 없습니다 - 심지어 구글링을 한 후에도.

 
pv_no_list :='23,34,45,56';
SELECT   DISTINCT REGEXP_SUBSTR (pv_no_list,
                                                     '[^,]+',
                                                     1,
                                                     LEVEL)
                                         no_list
                      FROM   DUAL
                CONNECT BY   REGEXP_SUBSTR (pv_no_list,
                                            '[^,]+',
                                            1,
                                            LEVEL) IS NOT NULL

(콜린 하트의 표현대로)의 "학대"connected by여기에는 좋은 목적이 있습니다: 사용함으로써.REGEXP_SUBSTR4개의 일치 항목(23,34,45,56) 중 하나만 추출할 수 있습니다. 정규식[^,]+쉼표를 포함하지 않는 문자열의 모든 문자 시퀀스와 일치합니다.

실행을 시도할 경우:

SELECT REGEXP_SUBSTR ('23,34,45,56','[^,]+') as "token" 
FROM   DUAL

얻게 될 것입니다23.

그리고 만약 당신이 도망가려고 한다면,

SELECT REGEXP_SUBSTR ('23,34,45,56','[^,]+',1,1) as "token"
FROM   DUAL

당신은 또한 얻을 것입니다.23이제 위치 1(기본값)에서 찾기 시작하고 첫 번째 발생을 반환하는 두 가지 추가 매개 변수도 설정합니다.

이제 실행합니다.

SELECT REGEXP_SUBSTR ('23,34,45,56','[^,]+',1,2) as "token"
FROM   DUAL

이번에 우리는 얻을 것입니다.34(두 번째 발생) 및 사용3마지막 파라미터가 반환될 때45등등.

재귀적 사용connected by와 함께level모든 관련 결과를 확인할 수 있습니다(단, 반드시 원래 순서는 아닙니다!).

SELECT DISTINCT REGEXP_SUBSTR ('23,34,45,56','[^,]+',1,LEVEL) as "token"
FROM   DUAL
CONNECT BY REGEXP_SUBSTR ('23,34,45,56','[^,]+',1,LEVEL) IS NOT NULL
order by 1

반환됨:

TOKEN
23
34
45
56

4개의 결과를 모두 포함할 뿐만 아니라 결과 집합에서 별도의 행으로 나눕니다!

만약 당신이 그것을 만지작거린다면, 그것은 당신에게 그 주제에 대한 더 명확한 견해를 줄 수 있을 것입니다.

connect by와 무관한regex_substr:

  • 번째는 계층적 쿼리를 수행하는 것입니다. http://docs.oracle.com/cd/B19306_01/server.102/b14200/queries003.htm 을 참조하십시오.

  • 두 번째는 정규 표현을 사용하여 부분 문자열을 얻는 것입니다.

이 쿼리는 다음을 "남용"합니다.connect by쿼리에서 행을 생성하는 기능dual식이 전달되는 한connect by참입니다. 새 행을 생성하고 유사 열의 값을 증가시킵니다.LEVEL.

그리고나서LEVEL에 전달됨regex_substr정규식을 적용할 때 n번째 값을 가져옵니다.

SELECT DISTINCT REGEXP_SUBSTR ('23,34,45,56','[^,]+',1,LEVEL) as "token"
FROM   DUAL
CONNECT BY REGEXP_SUBSTR ('23,34,45,56','[^,]+',1,LEVEL) IS NOT NULL
order by 1

@알파신:1개씩 주문해주세요, 저는 에러를 던지고 있습니다."오른쪽 단락 누락" 또한 이것을 건너뛰면 오라클 프로시저를 호출할 때 "ORA-22950: MAP 또는 ORDER 메서드 없이 개체를 주문할 수 없습니다"라는 오류가 표시됩니다.

언급URL : https://stackoverflow.com/questions/19195280/connect-by-clause-in-regex-substr

반응형