SQL에는 스트링 문자를 잘라내는 SUBSTR이라는 함수가 있습니다.
해당 함수를 잘 활용하면 스트링 처리에 대해서 정말 많은 도움을 받을 수 있습니다.
하지만 특정한 규칙을 갖고 있는 스트링인 경우에는 처리에 제약이 많이 있습니다.
예를들어 아래와 같은 레벨을 갖고 있는 컬럼의 데이타인 경우 각각 레벨을 분리하는 처리
대카테고리>중카테고리>소카테고리 ==> 이런 값들을 '>'으로 분리해서 각각 참조가 필요한 경우에는
INSTR로 '>'의 위치를 찾고 해당 위치를 기준으로 문자열을 잘라내야하는 반복처리가 필요합니다.
굉장히 비효율적이지요
해당기능은 오라클 10g이상에서 쉽게 정규식으로 스트링을 처리할 수 있습니다.
SELECT REGEXP_SUBSTR (email,
'[^@]+',
1,
1)
AS "ID",
REGEXP_SUBSTR (email,
'[^@]+',
1,
2)
AS "MailAddr"
FROM (SELECT '[email protected]' email FROM DUAL);
SELECT ROWNUM rn
, ip
, LPAD(REGEXP_SUBSTR(ip, '[^.]+', 1, 1), 3, '0') ip_1
, LPAD(REGEXP_SUBSTR(ip, '[^.]+', 1, 2), 3, '0') ip_2
, LPAD(REGEXP_SUBSTR(ip, '[^.]+', 1, 3), 3, '0') ip_3
, LPAD(REGEXP_SUBSTR(ip, '[^.]+', 1, 4), 3, '0') ip_4
FROM (SELECT '10.100.10.1' ip FROM dual
UNION ALL SELECT '10.100.1.10' FROM dual
UNION ALL SELECT '100.10.1.10' FROM dual
UNION ALL SELECT '100.10.1.20' FROM dual
UNION ALL SELECT '2.10.1.140' FROM dual)t
ORDER BY ip_1, ip_2, ip_3, ip_4;
저같은 경우에 REGEXP_SUBSTR를 굉장히 유용하게 사용하고 있습니다.
모르시는 분들이 많을것 같아 도움되시라고 이렇게 정리해서 올립니다.