oracle正则表达式数字(oracle 中判断是否为数字)

本文目录
- oracle 中判断是否为数字
- oracle判断字符串是否为数字
- oracle利用正则表达式判断字符串只包含数字
- oracle 的正则表达式
- oracle正则表达式,如何表达出一个号码全部由相同的数字组成,号码的位数不确定
- oracle正则表达式 开头字母结束数字
oracle 中判断是否为数字
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})+)$’)
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;
oracle判断字符串是否为数字
1、通过ASCII码判断是否数字,介于之间,(ascii(’0’) = 48, ascii(’9’) = ’57’)
2、调用cast函数尝试强制转换成NUMERIC或NUMBER,不是合法数字串即抛异常
3、调用translate函数,剔除所有数字后,看是否为空串
4、调用正则表达式,进行模式匹配(10g版本新加入的功能)
--通过ASCII码判断是否数字,介于之间,(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 || ’是的数字序列’);
ELSE
dbms_output.put_line(str || ’不是的数字序列’);
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 || ’是的数字序列’);
EXCEPTION
WHEN value_error THEN -- 字符串转实数错误
--dbms_output.put_line(SQLCODE || ’, ’ || SQLERRM);
dbms_output.put_line(str || ’不是的数字序列’);
END;
--调用translate函数,剔除所有数字后,看是否为空串
DECLARE
str VARCHAR2(10) := ’123abc’;
BEGIN
IF replace(translate(str, ’0123456789’, ’0’), ’0’, ’’) IS NULL THEN
dbms_output.put_line(str || ’是的数字序列’);
ELSE
dbms_output.put_line(str || ’不是的数字序列’);
END IF;
END;
--调用正则表达式,进行模式匹配(10g版本新加入的功能)
SELECT *
FROM dual
WHERE regexp_like(’1234’, ’^+$’);
--从任意字符串中提取数字串(调用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利用正则表达式判断字符串只包含数字
--oracle利用正则表达式判断字符串只包含数字
select * from bb where regexp_like(id,’^+?*$’);
oracle 的正则表达式
oracle的正则表达式(10g才可以用)
oracle的正则表达式(regular expression)简单介绍
目前,正则表达式已经在很多软件中得到广泛的应用,包括*nix(Linux, Unix等),HP等操作系统,PHP,C#,Java等开发环境。
Oracle 10g正则表达式提高了SQL灵活性。有效的解决了数据有效性,重复词的辨认, 无关的空白检测,或者分解多个正则组成的字符串等问题。
Oracle 10g支持正则表达式的四个新函数分别是:REGEXP_LIKE、REGEXP_INSTR、REGEXP_SUBSTR、和REGEXP_REPLACE。
它们使用POSIX 正则表达式代替了老的百分号(%)和通配符(_)字符。
特殊字符:
’^’ 匹配输入字符串的开始位置,在方括号表达式中使用,此时它表示不接受该字符集合。
’$’ 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 ’\n’ 或’\r’。
’.’ 匹配除换行符 \n之外的任何单字符。
’?’ 匹配前面的子表达式零次或一次。
’*’ 匹配前面的子表达式零次或多次。
’+’ 匹配前面的子表达式一次或多次。
’( )’ 标记一个子表达式的开始和结束位置。
’’ 标记一个中括号表达式。
’{m,n}’ 一个精确地出现次数范围,m=《出现次数《=n,’{m}’表示出现m次,’{m,}’表示至少出现m次。
’|’ 指明两项之间的一个选择。例子’^(+)$’表示所有小写字母或数字组合成的字符串。
\num 匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。
正则表达式的一个很有用的特点是可以保存子表达式以后使用,被称为Backreferencing. 允许复杂的替换能力
如调整一个模式到新的位置或者指示被代替的字符或者单词的位置. 被匹配的子表达式存储在临时缓冲区
中,缓冲区从左到右编号, 通过\数字符号访问。 下面的例子列出了把名字 aa bb cc 变成cc, bb, aa.
Select REGEXP_REPLACE(’aa bb cc’,’(.*) (.*) (.*)’, ’\3, \2, \1’) FROM dual;
REGEXP_REPLACE(’ELLENHILDISMIT
cc, bb, aa
’\’ 转义符。
字符簇:
任何字母。
任何数字。
任何字母和数字。
任何白字符。
任何大写字母。
任何小写字母。
任何标点符号。
。
各种操作符的运算优先级
\ 转义符
(), (?, (?=), 圆括号和方括号
*, +, ?, {n}, {n,}, {n,m} 限定符
^, $, \anymetacharacter 位置和顺序
| “或”操作
--测试数据
create table test(mc varchar2(60));
insert into test values(’112233445566778899’);
insert into test values(’22113344 5566778899’);
insert into test values(’33112244 5566778899’);
insert into test values(’44112233 5566 778899’);
insert into test values(’5511 2233 4466778899’);
insert into test values(’661122334455778899’);
insert into test values(’771122334455668899’);
insert into test values(’881122334455667799’);
insert into test values(’991122334455667788’);
insert into test values(’aabbccddee’);
insert into test values(’bbaaaccddee’);
insert into test values(’ccabbddee’);
insert into test values(’ddaabbccee’);
insert into test values(’eeaabbccdd’);
insert into test values(’ab123’);
insert into test values(’123xy’);
insert into test values(’007ab’);
insert into test values(’abcxy’);
insert into test values(’The final test is is is how to find duplicate words.’);
commit;
一、REGEXP_LIKE
select * from test where regexp_like(mc,’^a{1,3}’);
select * from test where regexp_like(mc,’a{1,3}’);
select * from test where regexp_like(mc,’^a.*e$’);
select * from test where regexp_like(mc,’^’);
select * from test where regexp_like(mc,’^’);
Select mc FROM test Where REGEXP_LIKE(mc,’’);
Select mc FROM test Where REGEXP_LIKE(mc,’^’);
二、REGEXP_INSTR
Select REGEXP_INSTR(mc,’$’) from test;
Select REGEXP_INSTR(mc,’+$’) from test;
Select REGEXP_INSTR(’The price is $400.’,’\$+’) FROM DUAL;
Select REGEXP_INSTR(’onetwothree’,’’) FROM DUAL;
Select REGEXP_INSTR(’,,,,,’,’*’) FROM DUAL;
Select REGEXP_INSTR(’,,,,,’,’’) FROM DUAL;
三、REGEXP_SUBSTR
SELECT REGEXP_SUBSTR(mc,’+’) FROM test;
SELECT REGEXP_SUBSTR(mc,’+’) FROM test;
SELECT REGEXP_SUBSTR(’aababcde’,’^a.*b’) FROM DUAL;
四、REGEXP_REPLACE
Select REGEXP_REPLACE(’Joe Smith’,’( ){2,}’, ’,’) AS RX_REPLACE FROM dual;
Select REGEXP_REPLACE(’aa bb cc’,’(.*) (.*) (.*)’, ’\3, \2, \1’) FROM dual;
oracle正则表达式,如何表达出一个号码全部由相同的数字组成,号码的位数不确定
用 regexp_like这个函数来解决,正则表达式为:+这个正则可以找出任何标点符号。
查询value中包含任何标点符号的记录如下:
select * from xxx where regexp_like(value,’+’);
POSIX 正则表达式由标准的元字符(metacharacters)所构成: ’$’ 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 ’\n’ 或 ’\r’。 ’?’ 匹配前面的子表达式零次或一次。 ’*’ 匹配前面的子表达式零次或多次。
’|’ 指明两项之间的一个选择。例子’^(+)$’表示所有小写字母或数字组合成的 ’( )’ 标记一个子表达式的开始和结束位置。 ’{m,n}’ 一个精确地出现次数范围,m=《出现次数《=n,’{m}’表示出现m次,’{m,}’表示至少出现m次。
\num 匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。 任何字母。
任何数字。
任何字母和数字。
任何白字符。
任何大写字母。
任何小写字母。
任何标点符号。
。 \转义符 *, +, ?, {n}, {n,}, {n,m} 限定符^, $, anymetacharacter 位置和顺序。
oracle正则表达式 开头字母结束数字
SELECT REGEXP_SUBSTR(’aba123ab123ab007ab’, ’+’, 1, 2) FROM DUAL;

本文相关文章:
word2003目录怎么做(word2003如何自动生成目录)
2026年10月10日 20:50
word页码从任意页开始(word中如何设置页码从指定页开始)
2026年10月1日 05:30
microsoft word打印在哪里(word打印在哪里)
2026年8月30日 00:00
免费的u盘修复工具(u盘数据恢复 for mac版,相信我,这款免费工具你会爱不释手的)
2026年8月6日 23:40
macromedia fireworks8序列号(Macromedia Fireworks 8序列号)
2026年7月23日 14:20
undergraduate degree(bachelor和undergraduate有什么区别么)
2026年10月3日 13:00
wordpress好用的插件(wordpress pdf插件哪个好用)
2026年9月24日 12:50
更多文章:
知名女星孙侨璐于跨年夜,心梗猝死,年仅25岁!一一一写给年轻人?1月2日演员孙侨潞离世,说好的来日方长转眼就是别离
2026年10月15日 10:40
avantage怎么设置为中文(Avantage安装丢失GIT)
2026年10月15日 03:00
activex控件未注册怎么办(登陆视频监控网页时提示activex控件未注册,怎么解决)
2026年10月14日 20:30



