【DB筆試面試458】在Oracle中,如何判斷一個字符串是否全為數字?
- 2019 年 10 月 11 日
- 筆記
題目部分
在Oracle中,如何判斷一個字符串是否全為數字?
答案部分
可以有2種辦法來判斷,第一種辦法為REPLACE加TRANSLATE函數,在程序中可以直接使用「TRANSLATE(REPLACE('入參','.',''),'/1234567890','/') IS NULL」來判斷入參為數字,缺點是,若入參有2個小數點或含有加減號則不能判斷。第二種辦法為使用TO_NUMBER或REGEXP_LIKE來自定義函數進行判斷。
第一種辦法示例:
SYS@PROD1> SELECT 2 NVL2(TRANSLATE(REPLACE('12','.',''),'/1234567890','/'),'CHAR','NUMBER') IN_TYPE, 3 NVL2(TRANSLATE(REPLACE('12.34','.',''),'/1234567890','/'),'CHAR','NUMBER') IN_TYPE2, 4 NVL2(TRANSLATE(REPLACE('12.Mabcd','.',''),'/1234567890','/'),'CHAR','NUMBER') IN_TYPE3 5 FROM DUAL; IN_TYP IN_TYP IN_T ------ ------ ----
NUMBER NUMBER CHAR
第二種辦法示例:
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. 利用 ISNUMERIC
CREATE OR REPLACE FUNCTION ISNUMERIC(STR IN VARCHAR2) RETURN NUMBER IS BEGIN IF STR IS NULL THEN RETURN 0; ELSE IF REGEXP_LIKE(STR, '(^[+-]?d{0,}.?d{0,}$)') 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程序員面試筆試寶典》,作者:李華榮。
About Me:小麥苗
● 本文作者:小麥苗,只專註於數據庫的技術,更注重技術的運用
● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/
● 本系列題目來源於作者的學習筆記,部分整理自網絡,若有侵權或不當之處還請諒解
● 版權所有,歡迎分享本文,轉載請保留出處
● 題目解答若有不當之處,還望各位朋友批評指正,共同進步