IS NUMBER
From Oracle FAQ
⧼orafaq-jumptonavigation⧽⧼orafaq-jumptosearch⧽
Oracle doesn't have a built-in IS_NUMERIC function to check is a value is numeric, but over the years people developed innovative alternatives. This page will discuss some of them:
SQL solution
Pure SQL solutions usually use TRANSLATE or REGEXP_LIKE to identify numeric data. Some examples:
SELECT case when trim(TRANSLATE(col1, '0123456789-,.', ' ')) is null then 'numeric' else 'alpha' end FROM tab1;
SELECT case when regexp_like(col1, '^\-?\d+(\.\d+)?$(E(\+|\-)\d+)?$') then 'numeric' else 'alfa' end FROM tab1;
PL/SQL solution
You can create a PL/SQL function for checking returning 1 if, given the current nls_numeric_characters value, the passed string represents a number and 0 if does not:
CREATE OR REPLACE FUNCTION is_number (p_string IN VARCHAR2) RETURN INT IS v_num NUMBER; BEGIN v_num := TO_NUMBER(p_string); RETURN 1; EXCEPTION WHEN VALUE_ERROR THEN RETURN 0; END is_number; /
Example:
SQL> alter session set nls_numeric_characters='.,'; Session altered. SQL> select is_number('1,1') from dual; IS_NUMBER('1,1') ---------------- 0 SQL> alter session set nls_numeric_characters=',.'; Session altered. SQL> select is_number('1,1') from dual; IS_NUMBER('1,1') ---------------- 1
Also see
- TO_NUMBER, function to convert a string to a number value.