Code:
Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production
SQL> SET SERVEROUTPUT ON;
SQL> DECLARE
2 v_cnt PLS_INTEGER := 10 ** 5;
3 v_tme PLS_INTEGER := 0;
4 v_bln BOOLEAN;
5 v_str VARCHAR2 (10) := '9ASDJADJ';
6 BEGIN
7 v_tme := DBMS_UTILITY.get_time;
8
9 FOR i IN 1 .. v_cnt
10 LOOP
11 v_bln := ASCII (v_str) BETWEEN 48 AND 57;
12 END LOOP;
13
14 DBMS_OUTPUT.put_line ('[ASCII (v_str) BETWEEN 48 AND 57] ' ||
15 (DBMS_UTILITY.get_time - v_tme) || ' hsecs.');
16
17 v_tme := DBMS_UTILITY.get_time;
18
19 FOR i IN 1 .. v_cnt
20 LOOP
21 v_bln := LPAD (v_str, 1) BETWEEN '0' AND '9';
22 END LOOP;
23
24 DBMS_OUTPUT.put_line ('[LPAD (v_str, 1) BETWEEN ''0'' AND ''9''] ' ||
25 (DBMS_UTILITY.get_time - v_tme) || ' hsecs.');
26
27 v_tme := DBMS_UTILITY.get_time;
28
29 FOR i IN 1 .. v_cnt
30 LOOP
31 v_bln := CHR (ASCII (v_str)) BETWEEN '0' AND '9';
32 END LOOP;
33
34 DBMS_OUTPUT.put_line ('[CHR (ASCII (v_str)) BETWEEN ''0'' AND ''9''] ' ||
35 (DBMS_UTILITY.get_time - v_tme) || ' hsecs.');
36
37 v_tme := DBMS_UTILITY.get_time;
38
39 FOR i IN 1 .. v_cnt
40 LOOP
41 v_bln := SUBSTR (v_str, 1) IN ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9');
42 END LOOP;
43
44 DBMS_OUTPUT.put_line ('[SUBSTR (v_str, 1) IN (''0'', ''1'', ''2'', ''3'', ''4'', ''5'', ''6', ''7'', ''8'', ''9'')] ' ||
45 (DBMS_UTILITY.get_time - v_tme) || ' hsecs.');
46
47 v_tme := DBMS_UTILITY.get_time;
48
49 FOR i IN 1 .. v_cnt
50 LOOP
51 v_bln := SUBSTR (v_str, 1) BETWEEN '0' AND '9';
52 END LOOP;
53
54 DBMS_OUTPUT.put_line ('[SUBSTR (v_str, 1) BETWEEN ''0'' AND ''9''] ' ||
55 (DBMS_UTILITY.get_time - v_tme) || ' hsecs.');
56
57 v_tme := DBMS_UTILITY.get_time;
58
59 FOR i IN 1 .. v_cnt
60 LOOP
61 v_bln := LTRIM (SUBSTR (v_str, 1, 1), '0123456789') IS NULL;
62 END LOOP;
63
64 DBMS_OUTPUT.put_line ('[LTRIM (SUBSTR (v_str, 1, 1), ''0123456789'') IS NULL] ' ||
65 (DBMS_UTILITY.get_time - v_tme) || ' hsecs.');
66
67 v_tme := DBMS_UTILITY.get_time;
68
69 FOR i IN 1 .. v_cnt
70 LOOP
71 v_bln := LENGTH (LTRIM (v_str, '0123456789')) < LENGTH (v_str);
72 END LOOP;
73
74 DBMS_OUTPUT.put_line ('[LENGTH (LTRIM (v_str, ''0123456789'')) < LENGTH (v_str)] ' ||
75 (DBMS_UTILITY.get_time - v_tme) || ' hsecs.');
76
77 v_tme := DBMS_UTILITY.get_time;
78
79 FOR i IN 1 .. v_cnt
80 LOOP
81 v_bln := TRANSLATE (SUBSTR (v_str, 1, 1), '1234567890', '0000000000') = '0';
82 END LOOP;
83
84 DBMS_OUTPUT.put_line ('[TRANSLATE (SUBSTR (v_str, 1, 1), ''1234567890'', ''0000000000'') =
'0''] ' ||
85 (DBMS_UTILITY.get_time - v_tme) || ' hsecs.');
86 END;
87 /
[ASCII (v_str) BETWEEN 48 AND 57] 26 hsecs.
[LPAD (v_str, 1) BETWEEN '0' AND '9'] 43 hsecs.
[CHR (ASCII (v_str)) BETWEEN '0' AND '9'] 44 hsecs.
[SUBSTR (v_str, 1) IN ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9')] 92 hsecs.
[SUBSTR (v_str, 1) BETWEEN '0' AND '9'] 42 hsecs.
[LTRIM (SUBSTR (v_str, 1, 1), '0123456789') IS NULL] 54 hsecs.
[LENGTH (LTRIM (v_str, '0123456789')) < LENGTH (v_str)] 45 hsecs.
[TRANSLATE (SUBSTR (v_str, 1, 1), '1234567890', '0000000000') = '0'] 303 hsecs.
PL/SQL procedure successfully completed.
SQL>
Looks like ASCII has it so far. Any other suggestions?