Oracle
[Oracle] 숫자 체크 방법
봉주니
2021. 1. 13. 11:52
오라클에서 숫자인지 확인하는 방법은 아래와 같이 간단합니다.
방법1. REGEXP_INSTR (정규식 문자열 검색 함수, Oracle 10g 이상 사용가능) - REGEXP_INSTR([숫자값],'[^0-9]') = 0 - 숫자가 아닌 값의 위치를 반환. 반환 값이 없으면 모든 문자가 숫자임 방법2. TRANSLATE (문자열 치환 함수, Oracle 8i 이상 사용가능) - TRANSLATE([숫자값],'A1234567890','A') IS NULL - 숫자를 찾아 치환 후 남은 문자가 존재 시 숫자가 아님 |
예제)
WITH TEST_TB AS (
SELECT 'A' CODE, '1000' PRICE FROM DUAL UNION ALL
SELECT 'B' CODE, '2000' PRICE FROM DUAL UNION ALL
SELECT 'C' CODE, '1000A' PRICE FROM DUAL
)
SELECT *
FROM TEST_TB;
결과)
방법1. REGEXP_INSTR
- REGEXP_INSTR(PRICE,'[^0-9]') 정수만 체크
- REGEXP_INSTR(PRICE,'^[+-]?\d*(\.?\d*)$') 부호(+,-) , 소수점까지 체크
WITH TEST_TB AS (
SELECT 'A' CODE, '1000' PRICE FROM DUAL UNION ALL
SELECT 'B' CODE, '2000' PRICE FROM DUAL UNION ALL
SELECT 'C' CODE, '1000A' PRICE FROM DUAL
)
SELECT *
FROM TEST_TB
WHERE REGEXP_INSTR(PRICE,'[^0-9]') = 0
결과)
방법2. TRANSLATE
WITH TEST_TB AS (
SELECT 'A' CODE, '1000' PRICE FROM DUAL UNION ALL
SELECT 'B' CODE, '2000' PRICE FROM DUAL UNION ALL
SELECT 'C' CODE, '1000A' PRICE FROM DUAL
)
SELECT *
FROM TEST_TB
WHERE TRANSLATE(PRICE,'A1234567890','A') IS NULL
결과)
반응형