【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/
● 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解
● 版权所有,欢迎分享本文,转载请保留出处
● 题目解答若有不当之处,还望各位朋友批评指正,共同进步