REGEXP_LIKE 질문이요 1 5 1,179

by 타잔 [Oracle 기초] [2017.12.08 10:21:33]


아래의 쿼리에서 '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
 

by 마농 [2017.12.08 10:47:46]

여러 문자를 표현하려면 + 를 붙여주면 됩니다. [[: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
;

 


by 타잔 [2017.12.08 12:58:29]

문제가 있네요. 다시 검토 부탁드려요.


by 마농 [2017.12.08 13:15:51]

질문에 문제가 있네요. 다시 질문 부탁드려요.
뭐가 문제인지 구체적으로 질문해 주세요.


by 타잔 [2017.12.08 13:52:04]

감사합니다


by jkson [2017.12.08 16:22:16]

ㅋㅋㅋ 시트콤인가요?ㅋㅋㅋ

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입