티스토리 뷰
반응형
안녕하세요. 바로 아래 글에서 인포믹스에서 정규식 패턴 변경 함수인 REGEX_REPLACE 를 테스트했습니다.
대신 REGEX_REPLACE 함수는 인포믹스 12버전에서만 지원되기에 질문자 분이 12 이하 버전에서 가능한 방법을 다시 질문하셨더군요. 해당 쿼리를 다시 데이터베이스 사랑넷의 '마농'님께서 기본적인 문자열 함수를 사용해서 쿼리를 재작성하신 것으로 테스트해봤습니다.
먼저 Oracle 정규식 함수를 사용한 SQL입니다.
WITH t AS
(
SELECT '문자001' v FROM dual
UNION ALL SELECT '문자열01' FROM dual
UNION ALL SELECT '01문자001' FROM dual
UNION ALL SELECT '121문자열01' FROM dual
UNION ALL SELECT '문자002' FROM dual
UNION ALL SELECT '문자003' FROM dual
)
-- Oracle 정규식 --
SELECT v
, REGEXP_REPLACE(REGEXP_REPLACE(v
, '([0-9]+)$', '000\1')
, '0+([0-9]{4})$', '\1')
AS x
FROM t
;
아래는 REGEX_REPLACE 대신 SUBSTR 과 LPAD 함수를 사용한 방법입니다.
WITH t AS
(
SELECT '문자001' v FROM dual
UNION ALL SELECT '문자열01' FROM dual
UNION ALL SELECT '01문자001' FROM dual
UNION ALL SELECT '121문자열01' FROM dual
UNION ALL SELECT '문자002' FROM dual
UNION ALL SELECT '문자003' FROM dual
UNION ALL SELECT '문자1' FROM dual
UNION ALL SELECT '문자' FROM dual
UNION ALL SELECT '문자11A03' FROM dual
)
SELECT v
, SUBSTR(v, 1, x-y) || LPAD(SUBSTR(v, x-y+1, 4), 4, '0') z
FROM (SELECT v
, x
, CASE WHEN SUBSTR(v, x-0, 1) BETWEEN '0' AND '9' THEN 1
+ CASE WHEN SUBSTR(v, x-1, 1) BETWEEN '0' AND '9' THEN 1
+ CASE WHEN SUBSTR(v, x-2, 1) BETWEEN '0' AND '9' THEN 1
+ CASE WHEN SUBSTR(v, x-3, 1) BETWEEN '0' AND '9' THEN 1
ELSE 0 END ELSE 0 END ELSE 0 END ELSE 0 END AS y
FROM (SELECT v, LENGTH(v) x FROM t) a
) a
;
인포믹스 11버전에서 그대로 사용해도 잘 수행되네요. 참고로 WITH문은 샘플 데이터입니다.
정말 멋지네요. '마농'님께 제대로 배웠습니다.
반응형
댓글
링크
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday