oracle怎么在字符字段中查出只包含数字的数据
如果你的条件不允许你写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;
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;
目前我就想到这个方法