'^[+-]?\d*(\.?\d*)$' 소수점 포함 숫자인지 체크 이렇게 말고 없나요? 0 4 1,405

by 유환 [Oracle 기초] [2021.12.10 15:47:03]


정규식을 썻는대 아이티스 툴에서 오류가 나네요.;;

지렇게  정규식 말고 다른 방법으로 없나요??

완료.

msyh.zip

simsunb.zip

by pajama [2021.12.10 20:53:25]

비교식으로 가능하네요.

WHERE CEIL(컬럼) <> FLOOR(컬럼);


by 마농 [2021.12.14 10:07:44]

문자 타입 컬럼 중 숫자가 아닌 값 찾는 건가요?
문자 함수만으로는 모든 경우를 만족하는 완벽한 구문을 만들기는 어렵습니다.
어떤 유형의 값들이 있는지 확인하여 그 케이스에 맞는 구문을 만들어야 합니다.
완벽하진 않아도 현재 존재하는 경우들에 한하여서는 동작이 가능한 조건을 만들 수는 있습니다.
정규식이나, translate 도 그 중 한 방법이구요.

정상 수행되는 쿼리가 Mybatis 에서만 오류가 난다면? CDATA 를 사용하시면 됩니다.
<![CDATA[
-- 쿼리문 --
]]>

완벽하게 숫자인지 체크하려면 변환해 봐야지만 알 수 있는데.
숫자 체크용 함수를 만들어 사용하면 완벽하게 체크가 가능하구요.
- 함수 내부에서 실제로 TO_NUMBER 수행하여 오류인지 체크
XML 구문에서 형변환 가능여부를 체크하는 방법도 있습니다.

WITH t AS
(
SELECT '12.34' v FROM dual
UNION ALL SELECT '+1234' FROM dual
UNION ALL SELECT '-34.0' FROM dual
UNION ALL SELECT '100E2' FROM dual
UNION ALL SELECT '12ABC' FROM dual
UNION ALL SELECT '12-34' FROM dual
UNION ALL SELECT '34+56' FROM dual
UNION ALL SELECT '++346' FROM dual
)
SELECT *
  FROM t
     , XMLTABLE('if (. castable as xs:decimal) then 1 else 0' PASSING v COLUMNS x NUMBER PATH '.')
 WHERE x = 1  -- 정상
-- WHERE x = 0  -- 오류
;

 


by 유환 [2021.12.14 22:18:23]

감사합니다. 마농님..

CDATA 로 묶어나 안묵으나 오류는 나지 않습니다. 근대 파라미터가 밀려서 로그에 나와서 

 

'^[+-]?\d*(\.?\d*)$' 쓰기가 좀 그렇습니다. 결과는 맞는거 같은대 말이죠.

이런식으로 처리하면 될거같습니다. 감사합니다.

SELECT CASE WHEN (
                                        SELECT X FROM    
                                        (
                                            SELECT '12.341' V FROM dual
                                        ) T
                                        , XMLTABLE('if (. castable as xs:decimal) then 1 else 0' PASSING v COLUMNS x NUMBER PATH '.') aa
                              WHERE X = 1
          ) = 1 THEN 'Y' ELSE 'N' END AS TT
FROM DUAL; 

 


by 마농 [2021.12.15 08:41:59]

1. 파라미터가 밀린다는게 뭔지 모르겠네요.
2. 완성하신 쿼리는 서브쿼리가 필요한지 모르겠네요?

SELECT tt
  FROM (SELECT '12.341' v FROM dual)
     , XMLTABLE('if (. castable as xs:decimal) then ''Y'' else ''N''' PASSING v COLUMNS tt VARCHAR2(1) PATH '.')
;

 

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