-- 查询value中不是纯数字的记录
select * from fzq ;
select * from fzq where regexp_like(value,'^[[:digit:]]+$');--以数字开头,并且匹配多次,直到结尾
select * from fzq where regexp_like(value,'^[[:digit:]]+');--以数字开头,并且含有一个或多个的结果集
-- 查询value中不包含任何数字的记录。
select * from fzq where regexp_like(value,'^[^[:digit:]]+$');--以非数字开头,匹配多次直到结尾
--查询以12或者1b开头的记录.区分大小写。
select * from fzq where regexp_like(value,'^1[2B]');
--查询以12或者1b开头的记录.不区分大小写。
select * from fzq where regexp_like(value,'^1[2b]','i');
-- 查询数据中包含空白的记录。
select * from fzq where regexp_like(value,'[[:space:]]');
--查询全是小写字母或者数字的记录。
select * from fzq where regexp_like(value,'^([a-z]+|[0-9]+)$');
--查询任何包含标点符号的记录。
select * from fzq where regexp_like(value,'[[:punct:]]');
--查询value中含有以1开头60结束字符串的记录并且长度是7位
select * from fzq where value like '1____60';
select * from fzq where regexp_like(value,'1....60');
--查询value中以1开头60结束的记录并且长度是7位并且全部是数字的记录。
select * from fzq where regexp_like(value,'^1[0-9]{4}60$');
--也可以这样实现,使用字符集。
select * from fzq where regexp_like(value,'^1[[:digit:]]{4}60$');
匹配serv_number字段全是数字的数据行
1:正则表达式(10g版本新加入的功能)
select * from vgopbme.vgop_dept_wh_20150416 t where regexp_like(t.serv_number ,'^[0-9]+$');
select * from vgopbme.vgop_dept_wh_20150416 t where regexp_like(t.serv_number ,'^[[:digit:]]+$');
2:通过ASCII码判断是否数字,介于[48, 57]之间,(ascii('0') = 48, ascii('9') = '57')
--通过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;
3:调用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;
4:调用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;
TRANSLATE是REPLACE所提供的功能的一个超集。
一、语法:
TRANSLATE(string,from_str,to_str)
二、目的
将(所有出现的)from_str中的每个字符替换为to_str中的相应字符。
如果from_str比to_str长,那么在from_string的后边超出的部分都被替换为空值,因为它们没有相应的替换字符。
to_str不能为空。Oracle将空字符串解释为NULL,并且如果TRANSLATE中的任何参数为NULL,那么结果也是NULL .
SELECT TRANSLATE('abcdefghij','abcdef','123456') FROM dual;
TRANSLATE (
--------------
123456ghij
select TRANSLATE('护照01浙江2 3昆 山4苏 3', '0123456789','a') from dual;--护照a浙江 昆 山苏
--将0替换为a,并且将1-9删除;
select TRANSLATE('护照01浙江2 3昆 山4苏 3', '0123456789','ab') from dual;--护照ab浙江 昆 山苏
--将0替换为a,1替换为b,将2-9删除;
select TRANSLATE('护照01浙江2 3昆 山4苏 3', '2301456789','ab') from dual;--护照浙江a b昆 山苏 b
--将2替换为a,3替换为b,剔除01456789;