by NExT맨 [SQL Query] PL/SQL ORACLE SQL QUERY INSTR REPLACE LENGTH SUBSTR [2012.12.28 10:59:50]
WITH t AS ( SELECT 1 pk, '##VVVIPP_NO:=0947582923984 ##ABCDEF_CD:=SUMIN_B01##MINWON_NM:=이거 너무 어려워요##APPLE_DT:=20121203 ##APPLY_TM:=155126 ##APPLY_WAY:=##REC_GB:=002006##NAME:=홍길동##ACPT_MINs:=7707171171717##ACPT_NM:=장혁##EXPECTED_DT:=20121205 ##EXPECTED_TM:=155100 ##TREAT_GAMES_ID:=0505050505053##TREAT_TEAM:=프랑스##DUE_DATE:=20121205 155100' str FROM dual UNION ALL SELECT 2, '##VVVIPP_NO:=0947582923984 ##ABCDEF_CD:=SUMIN_B04##MINWON_NM:=여러분 사랑합니다.##APPLE_DT:=20121203 ##APPLY_TM:=154056 ##APPLY_WAY:=##REC_GB:=002009##NAME:=임꺽정##ACPT_MINs:=8808181181818##ACPT_NM:=고소영##EXPECTED_DT:=20121204 ##EXPECTED_TM:=094100 ##TREAT_GAMES_ID:=8809271161543##TREAT_TEAM:=이탈리아##DUE_DATE:=20121204 094100' FROM dual UNION ALL SELECT 3, '##VVVIPP_NO:=0947582923984 ##ABCDEF_CD:=SUMIN_B14##MINWON_NM:=가나다라마바사흐어엉엉##APPLE_DT:=20121203 ##APPLY_TM:=154402 ##APPLY_WAY:=##REC_GB:=002002##NAME:=장길산##ACPT_MINs:=6903282178654##ACPT_NM:=아이유##EXPECTED_DT:=20121205 ##EXPECTED_TM:=180000 ##TREAT_GAMES_ID:=0374639374654##TREAT_TEAM:=아일랜드##DUE_DATE:=20121205 180000' FROM dual UNION ALL SELECT 4, '##MW_AFR_NM:=새해 복 많이 받으세요##MW_NOTES:=##DEAL_GBN:=01 ##DEAL_DTL:=##DEAL_BAS:=크하하-13687(2012.12.03.)유재석이 최고의 MC(상상플러스)##XCVBTYUN_DTTGHT:=##MW_TRANS_MET_CODE:=##CANCEL_CHECK:=##DPP_USR_ID:=9008142156784' FROM dual UNION ALL SELECT 5, '##MW_AFR_NM:=새해 복 많이 받으세요##MW_NOTES:=##MW_ABCD_STATUS:=30 ##TAKE_CONFRM_DTHR:=20121203162836 ##TAKE_CONFRM_CODE:=Y ##TAKE_CONFRM_USR_ID:=9008142156784 ##APPLE_JOBS_REG_CONFRM:=N ##MW_PPS_GET_ID:=8809271161543 ##DPP_USR_ID:=SSSV_8809271161543 ##DEAL_DDDD_MAN_USR_:=0946353823455' FROM dual UNION ALL SELECT 6, '##MW_AFR_NM:=새해 복 많이 받으세요##MW_NOTES:=가나다라마바사아자차카타파하##DEAL_GBN:=01 ##DEAL_DTL:=##DEAL_BAS:=가나다라마바사아자차카타파하##CXRTSVP_CRROPP:=##MW_TRANS_MET_CODE:=##CANCEL_CHEKK:=##DPP_USR_ID:=2011271165437' FROM dual UNION ALL SELECT 7, '##MW_AFR_NM:=메리 크리스마스입니다.##MW_NOTES:=무한도전무한도전##MW_CCRP_STATUS:=30 ##TAKE_CONFRM_DTHR:=20121203164621 ##TAKE_CONFRM_CODE:=Y ##TAKE_CONFRM_USR_ID:=2011271165437 ##APPLC_DEP_REG_CONFRM:=N ##MW_PPS_GET_USR_ID:=2011271165437 ##DPP_USER_IDVC:=9952345345620 ##DEAL_DXDY_MAN_USR_ID:=9907242116654 ' FROM dual ) SELECT pk , TRIM(REGEXP_SUBSTR(str, ' [0-9]{2}(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|30|31)[0-9]{7} ', 1, 1)) v1 , TRIM(REGEXP_SUBSTR(str, ' [0-9]{2}(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|30|31)[0-9]{7} ', 1, 2)) v2 , TRIM(REGEXP_SUBSTR(str, ' [0-9]{2}(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|30|31)[0-9]{7} ', 1, 3)) v3 , TRIM(REGEXP_SUBSTR(str, ' [0-9]{2}(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|30|31)[0-9]{7} ', 1, 4)) v4 , TRIM(REGEXP_SUBSTR(str, ' [0-9]{2}(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|30|31)[0-9]{7} ', 1, 5)) v5 FROM (SELECT pk, ' '||REGEXP_REPLACE(str, '[^0-9]', ' ')||' ' str FROM t) ;
마농님이 알려주신 방법이랑은 약간 다른데 아래 처럼 했습니다. 참고로 한 행에 여러 주민번호가 있는건
답이 안나오네요. ㅜㅜ
암튼 마농님 다시 한번 감사드립니다.
-- REGEXP_LIKE(컬럼명,'^[5-8]') 이부분으로 보아서는 1950년대생부터 1980년대생까지 뽑는 거네요. -- 제가 알려드린 방식의 맨앞 두자리 체크하는 것을 조금만 바꾸시면 됩니다. -- 저는 출생년도를 00~99 까지 뽑았는데... [0-9]{2} -- 출생년도를 50~89까지 뽑는걸로 바꾸면... [5~8][0-9] SELECT TRIM(REGEXP_SUBSTR(str, ' [5~8][0-9](0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|30|31)[0-9]{7} ', 1, 1)) v1 , TRIM(REGEXP_SUBSTR(str, ' [5~8][0-9](0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|30|31)[0-9]{7} ', 1, 2)) v2 , TRIM(REGEXP_SUBSTR(str, ' [5~8][0-9](0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|30|31)[0-9]{7} ', 1, 3)) v3 , TRIM(REGEXP_SUBSTR(str, ' [5~8][0-9](0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|30|31)[0-9]{7} ', 1, 4)) v4 , TRIM(REGEXP_SUBSTR(str, ' [5~8][0-9](0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|30|31)[0-9]{7} ', 1, 5)) v5 FROM (SELECT ' '||REGEXP_REPLACE(cust_nm, '[^0-9]', ' ')||' ' str FROM customer.tza011) ;