CREATE OR REPLACE Function Isnumeric(Str In Varchar2)\x0d\x0a\x0d\x0a Return Number\x0d\x0a\x0d\x0a Is\x0d\x0a\x0d\x0aBegin\x0d\x0a\x0d\x0a If Str Is Null\x0d\x0a \x0d\x0a Then\x0d\x0a \x0d\x0a Return 0;\x0d\x0a \x0d\x0a Else\x0d\x0a \x0d\x0a If Regexp_Like(Str, '^(-{0,1}+{0,1})[0-9]+(.{0,1}[0-9]+)$') --数值\x0d\x0a \x0d\x0a /*(str, '^[0-9]*[1-9][0-9]*$') --正整数*/\x0d\x0a \x0d\x0a Then\x0d\x0a \x0d\x0a Return 1;\x0d\x0a \x0d\x0a Else\x0d\x0a \x0d\x0a Return 0;\x0d\x0a \x0d\x0a End If;\x0d\x0a \x0d\x0a End If;\x0d\x0a\x0d\x0aEnd Isnumeric;\x0d\x0a\x0d\x0a创建上面的函数,然后判断返回值是否是1,1则表示是数值,0则表示非数值
创新互联是一家专注于成都网站设计、网站制作和成都移动服务器托管的网络公司,有着丰富的建站经验和案例。
oracle判断是否是数字有以下三种方法:
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自带的正则表达式函数REGEXP_REPLACE把数字全部取出来,然后计算数字的长度是否等于这个字段的长度,如果等于的话说明这个值全部是数字,如果不等于的话说明值里面包含非数字,测试语句如下:
SELECT(REGEXP_REPLACE('LSS12345', '[^0-9]')) FROM DUAL;---取出值里面的全部数字
SELECT LENGTH('LSS12345'),LENGTH(REGEXP_REPLACE('LSS12345', '[^0-9]')) FROM DUAL; ---查询出字段的长度和字段内数字的长度
SELECT* FROM DUAL WHERE LENGTH('LSS12345') = LENGTH(REGEXP_REPLACE('LSS12345', '[^0-9]')) ; ----查询这个字段所有的纯数字列
1、创建测试表,
create table test_isnum(id number, value varchar2(20));
2、插入测试数据,
insert into test_isnum values(1,'a');
insert into test_isnum values(2,329);
insert into test_isnum values(4,'15');
insert into test_isnum values(6,'2c');
commit;
3、查询表中所有记录,select t.*, rowid from test_isnum t,
4、编写sql,判断value字段,记录为数字的内容,
select t.*,
case
when not regexp_like(value, '\D') then
'是'
else
'否'
end as "是否数字"
from test_isnum t;