2023. 8. 26. 18:48ㆍDATA PROGRAMMING/SQL
SQL을 활용해 코딩을 하다보면 문자열로 이루어진 컬럼에서 특정 문자를 뽑아내 쓰고싶은 경우가 있다. 대표적으로 핸드폰 전화번호의 맨뒷자리, 이메일에서 @ 표시 뒤, 즉 사이트 관련 정보를 담은 부분 등이 있다. INSTR 함수와 SUBSTR 함수를 활용하여 그 기능을 수행할 수 있다.
INSTR(str, substr) : str에서 첫번째 나타나는 부분 문자열 substr의 시작 위치를 리턴함.
ex) INSTR(99-999-9999, '-') = 3
여기서 -는 문자열 내에서 총 두 번 등장하지만, 첫번째로 등장하는 위치의 인덱스 3이 도출된다
SUBSTR(str, position[ , length]) : str의 position부터 length 만큼의 문자열을 리턴함. length가 생략되면, 마지막까지의 문자열을 리턴함. position이 음수면, 뒤(-1)에서부터 카운트함.
ex) SUBSTR( 'abcdefg' , 3, 2) = 'cd'
대표적인 예제로 '99-999-9999'로 구성된 번호에서 가운데 999부분을 추출하는 코드를 작성해보자
예제 1
SET @phone = '99-999-9999';
SELECT SUBSTR(
@phone,
INSTR(@phone, '-')+1,
INSTR( SUBSTR(@phone, INSTR(@phone, '-') +1), '-') -1
)
간단하게 SUBSTR( 핸드폰 번호,
처음으로 등장하는 '-'의 위치 +1 ,
처음으로 등장하는 '-'의 위치 +1 부터 두번째로 등장하는 '-'의 위치 -1)을 해주면 된다.
이는 SUBSTR(문자열, 원하는 문자열의 시작위치, 원하는 문자열의 길이) 의 의미를 갖는다.
결과는 가운데 번호인 999일 것이다.
예제 2
아래 url에서 파라미터 utm_source의 값을 추출
단, utm_source 값의 길이는 다양함. (예를 들어, google, facebook 등)
http://www.example.com/landing-page?utm_source=google&utm_medium=email&utm_campaign=march2012
SET @url = 'http://www.example.com/landing-page?utm_source=google&utm_medium=email&utm_campaign=march2012' ;
SELECT SUBSTR( @url,
INSTR(@url,'utm_source') +11,
INSTR(SUBSTR(@url,INSTR(@url,'utm_source')),'&') -12
);
같은원리로
SUBSTR( 문자열 ,
'utm_source'가 시작하는 위치 +11
( 'utm_source='라는 11자리 문자열은 정해져 있으므로 이렇게 설정할 수 있다.) ,
'utm_source'가 시작하는 위치부터 처음으로 '&'가 등장하는 위치까지 문자열의 길이를 구하고 거기서 고정 값인'utm_source'와 '&'을 합친 길이 12를 빼준다.)
'DATA PROGRAMMING > SQL' 카테고리의 다른 글
SQL 반정규화 정리 (0) | 2023.08.31 |
---|---|
[SQL] 정규표현식 함수 REGEXP_SUBSTR()의 이해 (0) | 2023.08.30 |
[SQL] GROUP BY와 집계 함수를 사용할 때 주의할 점 (0) | 2023.08.25 |
[SQL] GROUP BY, HVING 절 간단한 응용 (0) | 2023.08.24 |
SQL - SQL로 PIVOT 테이블 만들기 (0) | 2023.08.14 |