Data Analysis/SQL Basic
[SQL 실습] URL 분석에 자주 사용되는 SQL 패턴 정리
뉴욕킴
2024. 12. 31. 23:03
1. 도메인 추출하기
-- example.com 부분만 추출
SELECT SUBSTRING(url FROM '://([^/]+)') as domain
FROM url_table;
-- www.example.com에서 example.com만 추출
SELECT SUBSTRING(url FROM '(?:https?://)?(?:www\.)?([^/]+)') as clean_domain
FROM url_table;
'://([^/]+)' 패턴 분석:
- ://
- URL에서 'http://' 또는 'https://' 다음에 오는 '://' 부분을 찾습니다
- ( )
- 괄호는 "캡처 그룹"을 만듭니다
- 이 부분이 실제로 추출하고 싶은 부분입니다
- [^/]
- [ ]: 문자 집합을 정의
- ^: NOT을 의미
- [^/]는 "슬래시(/)가 아닌 모든 문자"를 의미
- +
- "하나 이상의" 반복을 의미
- [^/]+는 "슬래시가 아닌 문자가 하나 이상" 있다는 뜻
2. 경로(path) 추출하기
-- /path/to/page 부분만 추출
SELECT SUBSTRING(url FROM '/[^?#]+') as path
FROM url_table;
URL: https://example.com/products/shoes?color=red#details → 추출되는 부분: /products/shoes
이유:
- '/' (첫 슬래시)부터 시작해서
- '?' 나 '#' 가 나오기 전까지의 모든 문자를 추출
3. 쿼리 파라미터 추출하기
-- ?id=123&page=2 부분 추출
SELECT SUBSTRING(url FROM '\?([^#]+)') as query_params
FROM url_table;
-- 특정 파라미터 값만 추출 (예: id값만)
SELECT SUBSTRING(url FROM 'id=([^&]+)') as id_param
FROM url_table;
4. URL 구성요소별 분리
SELECT
SUBSTRING(url FROM '.*://([^/]+)') as domain,
SUBSTRING(url FROM '/[^?#]+') as path,
SUBSTRING(url FROM '\?([^#]+)') as query,
SUBSTRING(url FROM '#(.+)$') as fragment
FROM url_table;
정규표현식 패턴 설명:
- [^/]: '/'가 아닌 모든 문자
- [^?#]: '?'와 '#'이 아닌 모든 문자
- +: 앞의 패턴이 1회 이상 반복
- .*: 모든 문자가 0회 이상 반복
- (): 그룹화
- ?:: 비캡처링 그룹 (결과에 포함하지 않음)
예시 URL: https://www.example.com/products/shoes?color=red&size=9#details
SUBSTRING(url FROM '.*://([^/]+)') as domain,
SUBSTRING(url FROM '/[^?#]+') as path,
SUBSTRING(url FROM '\?([^#]+)') as query,
SUBSTRING(url FROM '#(.+)$') as fragment
domain: http://www.example.com
path: /products/shoes
query: color=red&size=9
fragment: details
split_part 함수 사용법
split_part(string, delimiter, position)
split_part(분리하려는 문자열, 구분자 (예: ',', '-', '/' 등) , 추출하려는 위치 (1부터 시작) )
SELECT split_part('2024-03-31', '-', 1) as year, -- 결과: 2024
split_part('2024-03-31', '-', 2) as month, -- 결과: 03
split_part('2024-03-31', '-', 3) as day; -- 결과: 31