在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,app
4 NVL2(TRANSLATE(REPLACE('12.Mabcd','.',''),'/1234567890','/'),'CHAR','NUMBER') IN_TYPE3 ide
5 FROM DUAL;函數
IN_TYP IN_TYP IN_T學習
------ ------ ----spa
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程序員面試筆試寶典》,做者:李華榮。
詳細內容能夠添加麥老師微信或QQ私聊。
● 本文做者:小麥苗,只專一於數據庫的技術,更注重技術的運用
● 做者博客地址:http://blog.itpub.net/26736162/abstract/1/
● 本系列題目來源於做者的學習筆記,部分整理自網絡,如有侵權或不當之處還請諒解
● 版權全部,歡迎分享本文,轉載請保留出處
● QQ:646634621 QQ羣:618766405
● 提供OCP、OCM和高可用部分最實用的技能培訓
● 題目解答如有不當之處,還望各位朋友批評指正,共同進步
長按下圖識別二維碼或微信掃描下圖二維碼來關注小麥苗的微信公衆號:xiaomaimiaolhr,學習最實用的數據庫技術。
本文分享自微信公衆號 - DB寶(lhrdba)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。