정규식을 이용하여 특정패턴에 일치하지 않는 자료를 찾으려고 합니다. 0 2 845

by 낭만오리 [Oracle 기초] 정규식 [2018.05.04 18:31:57]


WITH t AS
(
select '8,117원*1명*25시간*12월' text, 'o' flag from dual
union all
select '662,000원*120%*1/12월' text, 'x' flag from dual
union all
select '6,000원*1명*118일' text, 'o' flag from dual
union all
select '1,100원*0.06827%' text, 'o' flag from dual
union all
select '10명*1,000원*10개월*25개읍면동' text, 'o' flag from dual
union all
select '1,080원/22시간*8시간*3명*10일' text, 'o' flag from dual
union all
select '70,000원*12명*4' text, 'x' flag from dual   
union all
select '5,000원*19명/2*12월' text, 'x' flag from dual   
union all
select '(2,000원*1명+1,000원*1명)*35시간*12월' text, 'o' flag from dual   
)
select *
  from t

사칙연산 (*/+-) 기호 바로 앞글자와 맨 마직막 글자는 한글 또는 %, ) 가 아니면 오류로 체크하려고 합니다.

정규식을 이용하여 자동으로 flag를 o, x로 처리할 수 있을까요??

고수님들의 도움 부탁드립니다. ^^;

 

by 마농 [2018.05.08 10:03:37]

1. 수치 바로 뒤에 단위(명, 원, % 등등)가 와야 하는 것 같습니다.
  - 제시하신 오류자료는 단위 없이 수치만 온 경우 뿐이네요.
  - 딱 이런 경우만 체크하면 될지?
2. 또 다른 형태의 오류는 없을런지?
  - 괄호가 짝이 안맞는다거나?  ((1명*12개월)
  - 숫자의 천단위 구분 컴마의 위치가 틀린다거나?  10,00
  - 숫자의 소수점이 두개 온다거나?  10.00.01
  - 기타 또 다른 형태의 오류는 없는지?

-- 단위 없이 수치만 사용된 자료 찾기 --
SELECT text
     , CASE WHEN REGEXP_LIKE(text, '[0-9]([)*/+-]|$)') THEN 'x' ELSE 'o' END flag
  FROM t
;

 


by 낭만오리 [2018.05.11 09:24:40]

마농님 감사합니다. ^^

제가 출장갔다가 오늘 복귀하여 확인이 많이 늦어졌습니다..

오류항목과 오류형태도 다양하게 체크하면 좋겠지만 실력이 되지않아서 욕심부리지 않고 질문드렸어요 ^^;

오류항목은 단위없이 수치만나온것만 하면될것 같고요

오류형태는 최종적으로 사용자가 입력한 값이 한/영문을 뺀 상태에서 계산결과나 나올수 있는?? (자바스크립트의 eval 과 같은) 형태를 체크해야 합니다.

 

도움에 감사드립니다 ~~

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