oracle如何得到某一列不能转换成数字的数据

假如表中有一个字段str是varchar类型,因为人为原因,输入的字符可能包含其他值或者输入的是无效数值,该怎么将这些数据找出来?
最新回答
孤独的王后°

2024-09-17 01:46:58

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:]]+$');.
缘字诀

2024-09-17 00:31:57

用 isnumeric(code) 这个函数来判断 ,查 isnumeric(code) = 0 就是不能转的数据