标签:RETURN 数字 ISNUMERIC NUMBER REPLACE 字符串 STR Oracle END
在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;
标签:RETURN,数字,ISNUMERIC,NUMBER,REPLACE,字符串,STR,Oracle,END 来源: https://blog.51cto.com/lhrbest/2700366
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。