oracle判断是否是数字

 我来答
千锋教育
2016-04-21 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
展开全部
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;
wjh301314
推荐于2016-10-06 · TA获得超过55万个赞
知道顶级答主
回答量:24.4万
采纳率:90%
帮助的人:12.2亿
展开全部
可以使用正则表达式的方式来判断。
REGEXP_LIKE( 字段 , '(^[ -]?\d{0,}\.?\d{0,}$)'
来判断 是否是数字

SQL> SELECT NULL
2 FROM dual
3 WHERE REGEXP_LIKE(NULL,'(^[ -]?\d{0,}\.?\d{0,}$)');

未选定行

SQL>
SQL> SELECT 'Abc'
2 FROM dual
3 WHERE REGEXP_LIKE('Abc','(^[ -]?\d{0,}\.?\d{0,}$)');

未选定行

SQL>
SQL> SELECT '100'
2 FROM dual
3 WHERE REGEXP_LIKE('100','(^[ -]?\d{0,}\.?\d{0,}$)');

'10
---
100

SQL>
SQL> SELECT '-100'
2 FROM dual
3 WHERE REGEXP_LIKE('-100','(^[ -]?\d{0,}\.?\d{0,}$)');

'-10
----
-100

SQL>
SQL> SELECT '.01'
2 FROM dual
3 WHERE REGEXP_LIKE('.01','(^[ -]?\d{0,}\.?\d{0,}$)');

'.0
---
.01

SQL>
SQL> SELECT '1995-10-1'
2 FROM dual
3 WHERE REGEXP_LIKE('1995-10-1','(^[ -]?\d{0,}\.?\d{0,}$)');

未选定行

SQL>
SQL> SELECT '1/20/95'
2 FROM dual
3 WHERE REGEXP_LIKE('1/20/95','(^[ -]?\d{0,}\.?\d{0,}$)');

未选定行
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
阳凌熊信然
2020-03-17 · TA获得超过1222个赞
知道小有建树答主
回答量:1889
采纳率:100%
帮助的人:10.8万
展开全部
不知道楼主的意思是不是要判断一个字段是否为纯数字还是说是否包含数字?
可以用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)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式