永发信息网

oracle怎么在字符字段中查出只包含数字的数据

答案:5  悬赏:70  手机版
解决时间 2021-11-29 03:57
oracle怎么在字符字段中查出只包含数字的数据
最佳答案
declare   v_length  number default 0;  
t_sum    number default 0; 
t_num    number default 0;  
t_is_num number default 0;  
v_str    TMP_XYX26.T2%type;   
cursor t_cur is select t2 from TMP_XYX26 where regexp_substr(t2, '[0-9]+') is not null; 
begin  open t_cur;  
loop    fetch t_cur      into v_str;    
exit when t_cur%notfound;    t_sum := 0;    
select length(v_str) into v_length from dual;    
for i in 1 .. v_length loop    select ascii(substr(v_str, i, 1)) into t_is_num from dual; 
if t_is_num between 48 and 57 then   select substr(v_str, i, 1) into t_num from dual;       
t_sum := t_sum + t_num;            
else null;      
end if;         
end loop;      
dbms_output.put_line;
end loop; 
close t_cur;
end;
全部回答
select * from tableName where check<> regexp_replace(check,'[^0-9]');

目前我就想到这个方法
正则表达式

如果你的条件不允许你写PLSQL函数的话,就用正则表达式,如下:


SELECt *
  FROM TABLE
 WHERe REGEXP_SUBSTr(CHECK, '^[0-9.-]d*.{0,1}d+$') IS NOT NULL;追问谢谢你提供的方法,能查出只有数字的项来,可是如果数字是1或9,就没有查出来。追答

试试这个吧:

SELECt *
  FROM TABLE
 WHERe REGEXP_SUBSTr(CHECK, '^[0-9.-]d*.{0,1}d*$') IS NOT NULL;
你应该希望提取的字段只要含有数字就提出,剔除空和不含数字的字符串。

select * from table where regexp_substr(check,'[0-9]+') is not null追问太感谢啦!
麻烦再问一下,这个字段有些项含有数字,但也有其它字符,但我只想对其中的数字求和,这样可以吗?怎么写SQL,谢谢!追答 
declare

  v_length  number default 0;  ---记录字符串长度
  t_sum    number default 0;  ---记录字符串中数字之和
  t_num    number default 0;  ---记录每次取到数字时的值
  t_is_num number default 0; ---判断取到的值是否数字
  v_str    TMP_XYX26.T2%type;  ---取出的值

  ---获取含有数字字符串所有记录
  cursor t_cur is
    select t2 from TMP_XYX26 where regexp_substr(t2, '[0-9]+') is not null;

begin
  open t_cur;
  loop
    fetch t_cur
      into v_str;
    exit when t_cur%notfound;
    t_sum := 0;
    select length(v_str) into v_length from dual;
    for i in 1 .. v_length loop
    
      select ascii(substr(v_str, i, 1)) into t_is_num from dual; ---根据ASCII码判断取出的字符是否为数字,48到57分别 表示0-9
    
      if t_is_num between 48 and 57 then
      
        select substr(v_str, i, 1) into t_num from dual;
        t_sum := t_sum + t_num;
      
      else
        null;
      end if;
    
    end loop;
    ---打印结果
    dbms_output.put_line('字符串' || ' ' || v_str || ' ' || '对应数字之和' || t_sum);
  end loop;
  close t_cur;
end;
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
如何挑选室内装饰油画
电镀、镀铬
珠海有没有可以打玻尿酸来丰下巴的地方?我不
x战记里小鸟是怎么死的?神威是喜欢她的吧?
请问Tom和Ted的英文名全称有哪些,有谁知道能
相亲如何对待那些嫌弃你矮的人
种在地里的大姜,把薄膜让风刮了 大姜在地里
某校食堂有4元、5元、6元三种价格的饭菜供学
请问一下气膜结构煤场成本要多少啊?
谢的笔顺笔画顺序
85C的罩杯有多大?胖吗?
红波网吧地址在什么地方,我要处理点事!
雨过天晴日光浴打一肖
主角穿越重生到异界,成为一条小蛇,最后化龙
代理绿杰苹果醋需要什么条件?
推荐资讯
60天祭日怎么算
白莲洞作文600
求:中孝介 【各自远扬】日文对白版的~说的那
12款本田crv都市款,是不是cvT变速箱
whereisjanefro m.同义句转换.
sam开头的英文是什么车
Sally,a shy girl ,never speakers in public
白天上班不在家,京东送货了怎么办
求什么动物不怕毒蛇咬?
小弟想问各位大神,灭霸到底有多强
VC打开串口问题。。。
想买声卡,什么牌子最好?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?