在oracle中,如何用一条select语句查询字段中非纯数字值

要将非纯数字的值列出来,包括空值
2024-11-07 23:56:53
推荐回答(4个)
回答1:

--1.正则判断,适用于10g以上版本
--非正整数 
select 字段 from 表 where regexp_replace(字段,'\d','') is not null;
--非数值类型
select 字段 from 表 where regexp_replace(字段,'^[-\+]?\d+(\.\d+)?$','') is not null;
--2.自定义函数,判断非值类型
create or replace function isnumber(col varchar2) return integer is
  i number;
begin
  i := to_number(col);
  return 1;
exception
  when others then
    return 0;
end;
select 字段 from 表 where isnumber(字段)=0;

回答2:

CREATE FUNCTION IS_INTEGER(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:= 0;

    ELSE

      FLAG:= -1;

      EXIT;

    END IF;

  END LOOP;

  RETURN FLAG;

END IS_INTEGER;

自己亲测,有图有真相,希望能帮助到你。

回答3:

where isnumeric(字段)>0 是纯数字的
where ( isnumeric(字段)<0 or 字段为null)非纯数字的值,包括空值

回答4:

select *
from table_name
where translate(column_name,'#0123456789','#') is not null or column_name is null