--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;
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;
自己亲测,有图有真相,希望能帮助到你。
where isnumeric(字段)>0 是纯数字的
where ( isnumeric(字段)<0 or 字段为null)非纯数字的值,包括空值
select *
from table_name
where translate(column_name,'#0123456789','#') is not null or column_name is null