2023. 8. 30. 18:17ㆍDATA PROGRAMMING/SQL
REGEXP_SUBSTR()의 이해를 위해 예시를 들자면,
dmurphy@classicmodelcars.com 이라는 이메일에서 dmurphy 부분과 classicmodelcars 부분을 추출하는 코드를 짜보면,
여기서 [^@]+는 @이 아닌 문자가 1개 이상 있는 문자열을 뜻한다.
SELECT REGEXP_SUBSTR(email, '[^@]+') -- 결과 : dmurphy
SELECT REGEXP_SUBSTR(REGEXP_SUBSTR(email, '[^@]+',1,2), '[^\\.]+') -- 결과 : classicmodelcars
첫번째 코드는 뒤의 파라미터 값이 없기 때문에 가장 먼저 등장하는 문자열인 dmurphy가 출력된다.
두번째 코드에서는 1, 2의 파라미터 값이 입력했는데 이는 첫번째에서부터 해당 정규표현식을 만족하는 두번째 문자열을 뜻한다. 여기에 한 번더 REGEXP_SUBSTR 함수를 써서 .가 들어가는 부분까지로 한정해 주면, classicmodelcars 값이 출력다.
예제
SELECT officeCode, city, phone, REGEXP_SUBSTR(phone, '[0-9]+', 1,2) "두번째 부분"
FROM s_offices
REGEXP_SUBSTR 함수를 통해 숫자로 이루어진 문자열 첫번째에서부터 두번째 문자열 즉 '+1 650 219 4782'라면 '650' 부분을 출력하게 된다. 여기서 세번째 인자(위 코드에선 1)의 의미를 제대로 파악하기 위해 해당 인자를 바꾸어 보았다.
SELECT officeCode, city, phone, REGEXP_SUBSTR(phone, '[0-9]+', 2,2) "두번째 부분"
FROM s_offices
SELECT officeCode, city, phone, REGEXP_SUBSTR(phone, '[0-9]+', 3,2) "두번째 부분"
FROM s_offices
위 결과를 보면 알수 있듯이 세번째 인자(position)의 기준은 하나의 문자이다. 즉 3의 인자를 넣어주면 첫번째 부분의 문자열이 두개인 officeCode 1, 2, 3 은 공백문자 ' '를 뜻하고, officeCode 4, 5, 6, 7은 첫번째 부분의 마지막 숫자를 뜻한다. 그렇기에 officeCode 1, 2, 3은 모두 세번째 부분이 출력 되고(두번째 부분 기준 두번째 부분) officeCode 4, 5, 6, 7은 모두 두번째 부분이 출력된다.(첫번째 부분 기준 두번째 부분)
'DATA PROGRAMMING > SQL' 카테고리의 다른 글
[SQL] DML 다중 테이블 검색문 - 집합 연산자 (0) | 2023.08.31 |
---|---|
SQL 반정규화 정리 (0) | 2023.08.31 |
[SQL] INSTR 함수와 SUBSTR 함수를 활용한 문자열 내의 특정 문자 추출 (0) | 2023.08.26 |
[SQL] GROUP BY와 집계 함수를 사용할 때 주의할 점 (0) | 2023.08.25 |
[SQL] GROUP BY, HVING 절 간단한 응용 (0) | 2023.08.24 |