壹共有三种方法,分别是使用 to_number()、regexp_like() 和 translate() 三种函数来进行匹配。如果字段的值是数字,返回1,否则返回0,具体的实现如下,三种方法任选壹种即可。运行结果:如果字符串是数字格式则返回1,不是则返回0。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
--1、利用 to_number
CREATE
OR
REPLACE
FUNCTION
isnumeric(str
IN
VARCHAR2)
RETURN
NUMBER
IS
v_str
FLOAT
;
BEGIN
IF str
IS
NULL
THEN
RETURN
0;
ELSE
BEGIN
SELECT
TO_NUMBER (str)
INTO
v_str
FROM
DUAL;
EXCEPTION
WHEN
INVALID_NUMBER
THEN
RETURN
0;
END
;
RETURN
1;
END
IF;
END
isnumeric;
/
--2、利用 regexp_like
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]+)$'
)
THEN
RETURN
1;
ELSE
RETURN
0;
END
IF;
END
IF;
END
isnumeric;
/
--3、利用 translate
CREATE
OR
REPLACE
FUNCTION
isnumeric (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
isnumeric;
/
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
SQL>
select
isnumeric(
'123a'
)
from
dual;
ISNUMERIC(
'123A'
)
-----------------
0
SQL>
select
isnumeric(
'123.509'
)
from
dual;
ISNUMERIC(
'123.509'
)
--------------------
1
SQL>
select
isnumeric(
'123.205.10.8'
)
from
dual;
ISNUMERIC(
'123.205.10.8'
)
-------------------------
0
|