4个回答
展开全部
--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)非纯数字的值,包括空值
where ( isnumeric(字段)<0 or 字段为null)非纯数字的值,包括空值
更多追问追答
追问
oracle中有 isnumeric的么?
追答
where ( isnumeric(字段)<0 or 字段为null)非纯数字的值,包括空值 -------这是在sqlserver 用
oracle 中需要先定义isnumeric
CREATE OR REPLACE FUNCTION isnumeric (str IN VARCHAR2)
RETURN NUMBER
IS
BEGIN
IF str IS NULL
THEN
RETURN 0;
ELSE
IF regexp_like (str, '^(-{0,1}+{0,1})[0-9]+(.{0,1}[0-9]+)$')--数值
/*(str, '^[0-9]*[1-9][0-9]*$') --正整数*/
THEN
RETURN 1;
ELSE
RETURN 0;
END IF;
END IF;
END isnumeric;
先创建函数,再用一下代码查询:
select * from 表 where ( isnumeric(字段)=0 or 字段 is null)
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
select *
from table_name
where translate(column_name,'#0123456789','#') is not null or column_name is null
from table_name
where translate(column_name,'#0123456789','#') is not null or column_name is null
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询