Oracle 判斷某個字段的值是不是數字


轉:https://my.oschina.net/bairrfhoinn/blog/207835
摘要: 壹共有三種方法,分別是使用 to_number()、regexp_like() 和 translate() 三種函數來進行匹配。如果字段的值是數字,返回1,否則返回0。由於 Oracle 數據庫本身沒有提供檢測字段是否為數字的方法,因此我們需要自行創建壹個 isnumeric() 的函數,然后再調用它來進行判斷。

壹共有三種方法,分別是使用 to_number()、regexp_like() 和 translate() 三種函數來進行匹配。如果字段的值是數字,返回1,否則返回0,具體的實現如下,三種方法任選壹種即可。運行結果:如果字符串是數字格式則返回1,不是則返回0。

--1、利用 to_number CREATE OR REPLACE FUNCTION isnumeric(str IN VARCHAR2) RETURN NUMBER IS v_str FLOAT; BEGIN IF str IS NULL THEN RETURN 0; ELSE BEGIN SELECT TO_NUMBER (str) INTO v_str FROM DUAL; EXCEPTION WHEN INVALID_NUMBER THEN RETURN 0; END; RETURN 1; END IF; END isnumeric; / --2、利用 regexp_like CREATE OR REPLACE FUNCTION isnumeric (str IN VARCHAR2) RETURN NUMBER IS BEGIN IF str IS NULL THEN RETURN 0; ELSE IF regexp_like (str, '^(-{0,1}+{0,1})[0-9]+(.{0,1}[0-9]+)$') THEN RETURN 1; ELSE RETURN 0; END IF; END IF; END isnumeric; / --3、利用 translate CREATE OR REPLACE FUNCTION isnumeric (str IN VARCHAR2) RETURN NUMBER IS v_str VARCHAR2 (1000); BEGIN IF str IS NULL THEN RETURN 0; ELSE v_str := translate(str, '.0123456789', '.'); IF v_str = '.' OR v_str = '+.' OR v_str = '-.' OR v_str IS NULL THEN RETURN 1; ELSE RETURN 0; END IF; END IF; END isnumeric; /
由於 Oracle 數據庫本身沒有提供檢測字段是否為數字的方法,因此我們需要自己創建壹個 isnumeric() 的函數,然后再調用它來進行判斷。具體的調用方式如下:
SQL> select isnumeric('123a') from dual; ISNUMERIC('123A') ----------------- 0 SQL> select isnumeric('123.509') from dual; ISNUMERIC('123.509') -------------------- 1 SQL> select isnumeric('123.205.10.8') from dual; ISNUMERIC('123.205.10.8') ------------------------- 0

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM