oracle如何得到某一列不能转换成数字的数据
假如表中有一个字段str是varchar类型,因为人为原因,输入的字符可能包含其他值或者输入的是无效数值,该怎么将这些数据找出来?...
假如表中有一个字段str是varchar类型,因为人为原因,输入的字符可能包含其他值或者输入的是无效数值,该怎么将这些数据找出来?
展开
2个回答
展开全部
oracle中没有现成的方法判断数据是否是数字类型的的,可以通过function来实现:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CREATE OR REPLACE FUNCTION isnum (str IN VARCHAR2)
RETURN NUMBER
IS
v_str VARCHAR2 (1000);
BEGIN
IF str IS NULL
THEN
RETURN 0;
ELSE
v_str := TRANSLATE (str, '.0123456789', '.');
IF v_str = '.' OR v_str = '+.' OR v_str = '-.' OR v_str IS NULL
THEN
RETURN 1;
ELSE
RETURN 0;
END IF;
END IF;
END isnum;
扩展判断一列的数据类型是不是数值类型:
select * from 表 where not regexp_like(列名,'^[[:digit:]]+$');.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CREATE OR REPLACE FUNCTION isnum (str IN VARCHAR2)
RETURN NUMBER
IS
v_str VARCHAR2 (1000);
BEGIN
IF str IS NULL
THEN
RETURN 0;
ELSE
v_str := TRANSLATE (str, '.0123456789', '.');
IF v_str = '.' OR v_str = '+.' OR v_str = '-.' OR v_str IS NULL
THEN
RETURN 1;
ELSE
RETURN 0;
END IF;
END IF;
END isnum;
扩展判断一列的数据类型是不是数值类型:
select * from 表 where not regexp_like(列名,'^[[:digit:]]+$');.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询