oracle 判断字段是不否全为数字

通过同事和好朋友查找,现将实现的方法给大家,a.oracle 自有函数实现 b.自定义函数实现

注意两种方法中字段都不能为null,这种情况要用case when 进行处理后方可用。

1.translate 方法,此方法是一个同事提供的特别好。

create table tux_if_number
(
serv_id number(20),
acc_nbr varchar2(30)
);
insert into tux_if_number values (1,'15204669284');
insert into tux_if_number values (2,'n045144669284');
insert into tux_if_number values (3,null);
select * from tux_if_number;
select
t.serv_id,
case when t.acc_nbr is null then -1
     when translate(t.acc_nbr,'#0123456789','#') is null then 1
     when translate(t.acc_nbr,'#0123456789','#') is not null then -1
end
from tux_if_number t;

把translate 相关用法给大家:

一、语法:  
    TRANSLATE(string,from_str,to_str)  
二、目的  
      返回将(所有出现的)from_str中的每个字符替换为to_str中的相应字符以后的string。TRANSLATE   是   REPLACE   所提供的功能的一个超集。如果   from_str   比   to_str   长,那么在   from_str   中而不在   to_str   中的额外字符将从   string   中被删除,因为它们没有相应的替换字符。to_str   不能为空。Oracle   将空字符串解释为   NULL,并且如果TRANSLATE   中的任何参数为NULL,那么结果也是   NULL。    

三、允许使用的位置  
      过程性语句和SQL语句。 

示例如下:

select   translate('abcdefghij','abcdefghij','123456')   from   dual;
select   translate('abcdefghij','abcdefghij','123456i')   from   dual;

2.自定义方法实,虽然能实现,但没有自带的方便,没有创建函数的情况下就不适用了,在这里只是要了解一下0-9的ascii为48-57即可.以下函数参考.

create or replace function if_number(in_varchar in varchar2)
return integer as flag integer;
i integer;
begin
for i in 1..length(in_varchar)
loop
if ascii(substr(in_varchar,i,1))>=48 and ascii(substr(in_varchar,i,1))<=57
then
flag:=1;
else
flag:=-1;
exit;
end if;
end loop;
return flag;
end if_number;
-- 实现和自有函数相关的sql如下:

select
t.serv_id,
case when t.acc_nbr is null then -1 else if_number(t.acc_nbr) end
from tux_if_number t;

以上仅为在开发中遇到同样的问题提供一个方法及参考,有更好的欢迎来交流

QQ:360263676

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值