아래의 쿼리에서 '11'이 나오질 않네요
1111호를 1호로 하면 '11' 결과값이 나오네요.
SELECT CASE WHEN REGEXP_LIKE('경기 고양시 일산동구200층1111호', '([[:digit:]]\층)([[:digit:]]\호)') THEN '11' ELSE '99' END AS TEST FROM DUAL; 아래 쿼리로 수행하면 나오기는 하는데 그러면 호정보가 1호, 11호, 111호, 1111호 등 다양해서 좀 더 간단한 방법은 없을까요? SELECT CASE WHEN REGEXP_LIKE('경기 고양시 일산동구200층1111호', '([[:digit:]]\층)([0-9]{4}\호)') THEN '11' ELSE '99' END AS TEST FROM DUAL;
결과
TEST
11
여러 문자를 표현하려면 + 를 붙여주면 됩니다. [[:digit:]]+
+ 는 하나 이상, * 은 0개 이상 입니다. * 보다는 + 가 좋을 듯 하네요.
\(역슬래시) 기호는 특수역할을 하는 문자가 그 기능을 하지 못하도록 예외처리 하는 문자입니다.
위에서는 아무런 역할 없이 불필요하게 사용되었네요.
'00층00호' 사이에 공백이 들어가는 경우가 왠지 존재할 것 같습니다. '00층 00호'
공백이 있을 수도 있고 없을 수도 있다면 ? 를 사용하시면 됩니다. ' ?'
WITH t AS ( SELECT '경기 고양시 일산동구200층1111호' addr FROM dual UNION ALL SELECT '경기 고양시 일산동구200층111호' FROM dual UNION ALL SELECT '경기 고양시 일산동구200층11호' FROM dual UNION ALL SELECT '경기 고양시 일산동구200층1호' FROM dual UNION ALL SELECT '경기 고양시 일산동구200층 1호' FROM dual ) SELECT addr , CASE WHEN REGEXP_LIKE(addr, '[[:digit:]]+층 ?[[:digit:]]+호') THEN '11' ELSE '99' END AS test FROM t ;