기본적으로 REGEXP_SUBSTR은 주제에서 일치하는 전체 부분을 반환합니다. 그러나 e (“추출”의 경우) 매개 변수가 지정되면 REGEXP_SUBSTR은 패턴의 첫 번째 그룹과 일치하는 주제 부분을 반환합니다. e 가 지정되었지만 group_num 도 지정되지 않은 경우, group_num 의 기본값은 1(첫 번째 그룹)입니다. 패턴에 하위 식이 없으면 REGEXP_SUBSTR은 e 가 설정되지 않은 것처럼 작동합니다. e 를 사용하는 예는 이 항목의 예 를 참조하십시오.
group_num
추출할 그룹을 지정합니다. 그룹은 정규식에서 괄호를 사용하여 지정됩니다.
group_num 가 지정되면 Snowflake는 추출을 허용합니다. 'e' 옵션도 지정하지 않은 경우에도 마찬가지입니다. 'e' 는 내포되어 있습니다.
REGEXP_INSTR 함수 설명서에는 REGEXP_SUBSTR 및 REGEXP_INSTR을 모두 사용하는 많은 예가 포함되어 있습니다. 이러한 예도 살펴보는 것이 좋습니다.
이 예에서는 아래에 만들어진 문자열을 사용합니다.
CREATEORREPLACETABLEdemo2(idINT,string1VARCHAR);INSERTINTOdemo2(id,string1)VALUES(2,'It was the best of times, it was the worst of times.'),(3,'In the string the extra spaces are redundant.'),(4,'A thespian theater is nearby.');SELECT*FROMdemo2;
+----+-------------------------------------------------------------+| ID | STRING1 ||----+-------------------------------------------------------------|| 2 | It was the best of times, it was the worst of times. || 3 | In the string the extra spaces are redundant. || 4 | A thespian theater is nearby. |+----+-------------------------------------------------------------+
문자열은 다음과 같은 특징이 있습니다.
id 가 2 인 문자열에는 “the”라는 단어가 여러 번 나옵니다.
id 가 3 인 문자열에는 “the”라는 단어가 여러 번 나오고 단어 사이에 공백이 추가로 있습니다.
id 가 4 인 문자열에는 여러 단어(“thespian”과 “theater”) 내에 문자 시퀀스 “the”가 있지만, 그 자체로 “the”라는 단어는 없습니다.
+---------+---------+---------+| RESULT1 | RESULT2 | RESULT3 ||---------+---------+---------|| M | A | N |+---------+---------+---------+
다음은 몇 가지 추가 예입니다.
테이블을 만들고 데이터를 삽입합니다.
CREATEORREPLACETABLEmessage(bodyVARCHAR(255));INSERTINTOmessageVALUES('Hellooo World'),('How are you doing today?'),('the quick brown fox jumps over the lazy dog'),('PACK MY BOX WITH FIVE DOZEN LIQUOR JUGS');
단어 경계(\b)와 일치시킨 후, 0개 이상의 단어 문자(\S), 문자 o, 그리고 다음 단어 경계까지 0개 이상의 단어 문자를 일치시켜 소문자 ``o``을 포함하는 첫 번째 일치 항목을 반환합니다.
+---------------------------------------------+---------+| BODY | RESULT ||---------------------------------------------+---------|| Hellooo World | Hellooo || How are you doing today? | How || the quick brown fox jumps over the lazy dog | brown || PACK MY BOX WITH FIVE DOZEN LIQUOR JUGS | NULL |+---------------------------------------------+---------+
다음과 같이 제목의 세 번째 문자부터 시작해 소문자 o 를 포함하는 첫 번째 일치 항목을 반환합니다.
+---------------------------------------------+--------+| BODY | RESULT ||---------------------------------------------+--------|| Hellooo World | llooo || How are you doing today? | you || the quick brown fox jumps over the lazy dog | brown || PACK MY BOX WITH FIVE DOZEN LIQUOR JUGS | NULL |+---------------------------------------------+--------+
다음과 같이 제목의 세 번째 문자부터 시작해 소문자 o 를 포함하는 세 번째 일치 항목을 반환합니다.
+---------------------------------------------+--------+| BODY | RESULT ||---------------------------------------------+--------|| Hellooo World | NULL || How are you doing today? | today || the quick brown fox jumps over the lazy dog | over || PACK MY BOX WITH FIVE DOZEN LIQUOR JUGS | NULL |+---------------------------------------------+--------+
다음과 같이 대/소문자를 구분하지 않고 제목의 세 번째 문자부터 시작해 소문자 o 를 포함하는 세 번째 일치 항목을 반환합니다.
+---------------------------------------------+--------+| BODY | RESULT ||---------------------------------------------+--------|| Hellooo World | NULL || How are you doing today? | today || the quick brown fox jumps over the lazy dog | over || PACK MY BOX WITH FIVE DOZEN LIQUOR JUGS | LIQUOR |+---------------------------------------------+--------+
이 예는 빈 문자열을 지정하여 정규식 매개 변수를 명시적으로 생략할 수 있음을 보여줍니다.
+---------------------------------------------+--------------------------+| BODY | RESULT ||---------------------------------------------+--------------------------|| Hellooo World | Hellooo World || How are you doing today? | How are you doing today? || the quick brown fox jumps over the lazy dog | NULL || PACK MY BOX WITH FIVE DOZEN LIQUOR JUGS | NULL |+---------------------------------------------+--------------------------+
WHERE 절에서 REGEXP_SUBSTR 함수를 호출하여 패턴과 일치하는 값이 포함된 행을 필터링합니다. 이 함수를 사용하면 OR 조건을 여러 개 사용하는 것을 피할 수 있습니다.
다음 예제에서는 이전에 만든 demo2 테이블을 쿼리하여 best 문자열 또는 thespian 문자열을 포함하는 행을 반환합니다. 패턴과 일치하는 행을 반환하는 조건에 ``IS NOT NULL``을 추가합니다. 즉, REGEXP_SUBSTR 함수가 ``NULL``을 반환하지 않은 행은 다음과 같습니다.
+----+------------------------------------------------------+| ID | STRING1 ||----+------------------------------------------------------|| 2 | It was the best of times, it was the worst of times. || 4 | A thespian theater is nearby. |+----+------------------------------------------------------+
AND 조건을 사용하여 여러 패턴과 일치하는 행을 찾을 수 있습니다. 예를 들어, 다음 쿼리는 best 문자열 또는 thespian 문자열을 포함하고 It 문자열로 시작하는 행을 반환합니다.
+----+------------------------------------------------------| ID | STRING1 ||----+------------------------------------------------------|| 2 | It was the best of times, it was the worst of times. |+----+------------------------------------------------------+