Oracle中如何判断字符串是否全为数字
时间:2021-07-01 10:21:17
帮助过:20人阅读
通过ASCII码判断是否数字,介于[48, 57]之间,(ascii(‘0‘) = 48, ascii(‘9‘) = ‘57‘)
DECLARE
str VARCHAR2(
10) :
= ‘123a‘;
val NUMERIC(10);
i int;
k int;
flag BOOLEAN;
BEGIN
flag := TRUE;
for i
in 1..
10 loop
--新密码是否6位数字
k :
= ascii(substr(
str, i,
1));
if k
< 48 or k
> 57 THEN
flag := FALSE;
end if;
end LOOP;
IF flag
= true
THEN
dbms_output.put_line(str || ‘是[0-9]的数字序列‘);
ELSE
dbms_output.put_line(str || ‘不是[0-9]的数字序列‘);
END IF;
END;
-- 调用cast函数尝试强制转换成NUMERIC或NUMBER,不是合法数字串即抛异常
DECLARE
str VARCHAR2(
10) :
= ‘123‘;
val NUMERIC(10);
BEGIN
val := CAST(
str AS NUMERIC);
dbms_output.put_line(str || ‘是[0-9]的数字序列‘);
EXCEPTION
WHEN value_error
THEN -- 字符串转实数错误
--dbms_output.put_line(SQLCODE || ‘, ‘ || SQLERRM);
dbms_output.put_line(
str || ‘不是[0-9]的数字序列‘);
END;
--调用translate函数,剔除所有[0-9]数字后,看是否为空串
DECLARE
str VARCHAR2(
10) :
= ‘123abc‘;
BEGIN
IF replace(translate(
str,
‘0123456789‘,
‘0‘),
‘0‘,
‘‘)
IS NULL THEN
dbms_output.put_line(str || ‘是[0-9]的数字序列‘);
ELSE
dbms_output.put_line(str || ‘不是[0-9]的数字序列‘);
END IF;
END;
--调用正则表达式,进行模式匹配(10g版本新加入的功能)
SELECT *
FROM dual
WHERE regexp_like(
‘1234‘,
‘^[[:digit:]]+$‘);
--从任意字符串中提取数字串(调用2次translate函数)。
--假定初始串为str。首先将str中数字全部替换为空格,输出记为str2;
--其次,对每个在str中出现的任意str2串中字符,如果是str2的首字符则替换为空格,其它字符则全部剔除
DECLARE
--str VARCHAR2(100) := ‘ 护照01浙江2 3昆 山4苏 3‘;
str VARCHAR2(
100) :
= ‘ 护照浙江 昆 山苏 4‘;
ret VARCHAR2(
10);
BEGIN
ret := TRIM(TRANSLATE(
str, trim(TRANSLATE(
str,
‘1234567890‘,
‘ ‘)),
‘ ‘));
dbms_output.put_line(ret);
END;
Oracle中如何判断字符串是否全为数字
标签:正则 函数 http substr 功能 学习 bsp loop 正则表达