다음은 문자열에서 마지막 2 세트의 문자를 가져올 정규식입니다. 캐나다 우편 번호를 받고있는 것으로 보이므로 좀 더 조심해야합니다.
WITH 절은 데이터가있는 테이블을 설정합니다. 첫 번째 행은 유효한 우편 번호 형식이지만 두 번째 행은 잘못되었습니다 (행 2 자). 테스트 케이스에 항상 예기치 않은 데이터를 사용하면 놀라움을 원하지 않으며 데이터에 항상 놀라움이 포함됩니다.
첫 번째 정규식은 문자열 끝에 공백으로 구분 된 2 세트의 3 문자를 찾습니다. 언뜻보기에는 이것이 괜찮은 것처럼 보일 수 있지만 데이터가 잘못되면 반환 될 것입니다. 그것을 조이려면 두 번째 정규식을 사용하십시오. 두 번째 정규식은 특히 캐나다 우편 번호 형식 인 uppercase_letter-digit-uppercase_letter-space-digit-uppercase_letter-digit를 확인하고 찾을 수없는 경우 NULL을 반환합니다. 어쩌면 이것을 NVL() 호출로 잡아 내고 대신 메시지를 반환하기를 원할 것입니다.
with tbl(str) as (
select 'Windsor ON P6B 0B8' from dual union all
select 'Windsor_bad_postcode ON A3C 9BB' from dual
)
select --regexp_substr(str, '.* (.{3} .{3})$', 1, 1, NULL, 1) postcode_w_bad
regexp_substr(str, '.* ([A-Z]\d[A-Z] \d[A-Z]\d)$', 1, 1, NULL, 1) postcode
from tbl;
고맙습니다 ... 정말 잘됐다. –