orcl regexp_like 的用法

本文详细介绍Oracle 10g以上版本支持的正则表达式函数,包括REGEXP_LIKE、REGEXP_INSTR、REGEXP_SUBSTR和REGEXP_REPLACE,并通过实例演示如何使用这些函数进行数据筛选与处理。

oracle10g以上支持正则表达式的函数主要有下面四个:
1、REGEXP_LIKE :与LIKE的功能相似
2、REGEXP_INSTR :与INSTR的功能相似
3、REGEXP_SUBSTR :与SUBSTR的功能相似
4、REGEXP_REPLACE :与REPLACE的功能相似
POSIX 正则表达式由标准的元字符(metacharacters)所构成:
'^' 匹配输入字符串的开始位置,在方括号表达式中使用,此时它表示不接受该字符集合。
'$' 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n' 或 '\r'。
'.' 匹配除换行符之外的任何单字符。
'?' 匹配前面的子表达式零次或一次。
'+' 匹配前面的子表达式一次或多次。
'*' 匹配前面的子表达式零次或多次。
'|' 指明两项之间的一个选择。例子'^([a-z]+|[0-9]+)$'表示所有小写字母或数字组合成的字符串。
'( )' 标记一个子表达式的开始和结束位置。
'[]' 标记一个中括号表达式。
'{m,n}' 一个精确地出现次数范围,m=<出现次数<=n,'{m}'表示出现m次,'{m,}'表示至少出现m次。
\num 匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。
字符集: 
[[:alpha:]] 任何字母。
[[:digit:]] 任何数字。
[[:alnum:]] 任何字母和数字。
[[:space:]] 任何白字符。
[[:upper:]] 任何大写字母。
[[:lower:]] 任何小写字母。
[[:punct:]] 任何标点符号。
[[:xdigit:]] 任何16进制的数字,相当于[0-9a-fA-F]。
各种操作符的运算优先级
\转义符
(), (?:), (?=), [] 圆括号和方括号
*, +, ?, {n}, {n,}, {n,m} 限定符
^, $, anymetacharacter 位置和顺序

*/

------------------------------------------------------------------------------

创建测试环境:

create table bqh5 (id varchar(4),zh varchar(10));
insert into bqh5 values ('1','12345670');
insert into bqh5 values ('2','abcde');
insert into bqh5 values ('3','1212 56');
insert into bqh5 values ('4','abc');
insert into bqh5 values ('5','Aa123');
insert into bqh5 values ('6','abcdefghi');
insert into bqh5 values ('7','afc,.');
insert into bqh5 values ('8','1d345239');
insert into bqh5 values ('9','1D3389');
select * from bqh5

 查询zh中以1开头0结束的并且长度是8位的数据:

select * from bqh5 where zh like '1______0'   

 select * from bqh5 where regexp_like(zh,'1......0');

 查询zh中以1开头0结束的并且长度是8位并且全部时数字的数据:

select * from bqh5 where regexp_like(zh,'1[0-9]{5}70');
select * from bqh5 where regexp_like(zh,'1[[:digit:]]{5}70')

 

查询zh中不是纯数字的数据:

select * from bqh5 where not regexp_like(zh,'^[[:digit:]]+$');

 

查询zh中不含任何数字的数据:

 select * from bqh5 where  regexp_like(zh,'^[^[:digit:]]+$');

查询以12或者以1d开头的数据,不区分大小写:

select * from bqh5 where  regexp_like(zh,'^1[2d]','i');

 

查询以12或者以1d开头的数据,区分大小写:

 select * from bqh5 where  regexp_like(zh,'^1[2D]');

查询包含空格的数据:

 select * from bqh5 where  regexp_like(zh,'[[:space:]]');

查询包含标点符号的数据:

select * from bqh5 where  regexp_like(zh,'[[:punct:]]');

 

查询包含数字或者字母的数据:

 select * from bqh5 where  regexp_like(zh,'^([[0-9]+)$+|[a-z]','i');

---------------------------------------------------------------------------------

感谢您的阅读,如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮。本文欢迎各位转载,但是转载文章之后必须在文章页面中给出作者和原文连接。

转载于:https://www.cnblogs.com/su-root/p/9736128.html

CREATE OR REPLACE TYPE TYPE_MTRL_ROW AS OBJECT(pageNumber NUMBER, fenlei VARCHAR2(1024), bianma VARCHAR2(128), banben VARCHAR2(32), mingcheng VARCHAR2(128), guige VARCHAR2(4000), pinpai VARCHAR2(4000), caizhi VARCHAR2(512), zhuangtai CHAR(9), danwei VARCHAR2(1024), chuangjianshijian DATE, chuangjianren VARCHAR2(64), wlyxj VARCHAR2(1024)); CREATE OR REPLACE TYPE TYPE_MTRL_TABLE AS TABLE OF TYPE_MTRL_ROW; CREATE OR REPLACE FUNCTION PLM1."RUNA_SEL_MTRL"( P_BIANMA IN VARCHAR2, --编码 P_MINGCHENG IN VARCHAR2, --名称 P_GUIGE IN VARCHAR2, --规格 P_WLYXJ IN VARCHAR2, --物料优先级 P_startIndex IN INTEGER, --分页起始行 P_endIndex IN INTEGER --分页截止行 ) RETURN TYPE_MTRL_TABLE AS TEMP_ROW TYPE_MTRL_ROW; -- 定义单行 TEMP_TABLE TYPE_MTRL_TABLE; -- 定义返回结果,并初始化 v_sql VARCHAR2(2000); -- 定义单行 v_result VARCHAR2(2000); BEGIN v_sql := 'select * from (select row_number() over(order by chuangjianshijian desc) pageNumber, fenlei, bianma, banben, mingcheng, guige, guige as pinpai, caizhi, zhuangtai, danwei, chuangjianshijian, chuangjianren, wlyxj from "wuliao" where 1 = 1'; IF P_BIANMA IS NOT NULL THEN v_sql := v_sql || ' and bianma LIKE ''%' || P_BIANMA || '%'''; END IF; IF P_MINGCHENG IS NOT NULL THEN v_sql := v_sql || ' and mingcheng LIKE ''%' || P_MINGCHENG || '%'''; END IF; IF P_WLYXJ IS NOT NULL THEN v_sql := v_sql || ' and wlyxj LIKE ''%' || P_WLYXJ || '%'''; END IF; IF P_GUIGE IS NOT NULL THEN FOR i IN 1..LENGTH(P_GUIGE) + 1 LOOP v_result := REGEXP_SUBSTR(P_GUIGE, '[^ ]+', 1, i); EXIT WHEN v_result IS NULL; v_sql := v_sql || ' and guige LIKE ''%' || v_result || '%'''; END LOOP; END IF; v_sql := v_sql || ') aa where pageNumber between ' || P_startIndex || ' + 1 and ' || P_endIndex; EXECUTE IMMEDIATE v_sql BULK COLLECT INTO TEMP_TABLE; RETURN TEMP_TABLE; END; 上述数据库函数执行时,提示异常“ORA-00932: 数据类型不一致: 应为 -, 但却获得 -”,请分析错误原因
07-03
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值