oracle中怎么判断全为空格_Oracle中如何判断字符串是否全为数字

匿名用户

1级

2017-04-14 回答

1、通过ASCII码判断是否数字,介于[48, 57]之间,(ascii('0') = 48, ascii('9') = '57')

2、调用cast函数尝试强制转换成NUMERIC或NUMBER,不是合法数字串即抛异常

3、调用translate函数,剔除所有[0-9]数字后,看是否为空串

4、调用正则表达式,进行模式匹配(10g版本新加入的功能)

--通过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  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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值