Oracle regexp_like的相关知识及使用示例

数据库 Oracle
本文我们主要介绍了Oracle regexp_like的相关知识及使用示例,希望能够对您有所帮助。

Oracle regexp_like的相关知识及使用示例是本文我们主要要介绍的内容,我们首先看一下Oracle中的支持正则表达式的函数,主要有下面四个:

1,REGEXP_LIKE :与LIKE的功能相似。

2,REGEXP_INSTR :与INSTR的功能相似。

3,REGEXP_SUBSTR :与SUBSTR的功能相似。

4,REGEXP_REPLACE :与REPLACE的功能相似。

它们在用法上与Oracle SQL 函数LIKE、INSTR、SUBSTR 和REPLACE 用法相同,但是它们使用POSIX 正则表达式代替了老的百分号(%)和通配符(_)字符。

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 位置和顺序。

  1. create table fzq id varchar(4),  
  2. value varchar(10) --数据插入  
  3. insert into fzq values  
  4. ('1','1234560');  
  5. insert into fzq values  
  6. ('2','1234560');  
  7. insert into fzq values  
  8. ('3','1b3b560');  
  9. insert into fzq values  
  10. ('4','abc');  
  11. insert into fzq values  
  12. ('5','abcde');  
  13. insert into fzq values  
  14. ('6','ADREasx');  
  15. insert into fzq values  
  16. ('7','123 45');  
  17. insert into fzq values  
  18. ('8','adc de');  
  19. insert into fzq values  
  20. ('9','adc,.de');  
  21. insert into fzq values  
  22. ('10','1B');  
  23. insert into fzq values  
  24. ('10','abcbvbnb');  
  25. insert into fzq values  
  26. ('11','11114560');  
  27. insert into fzq values  
  28. ('11','11124560'); 

 

--regexp_like

--查询value中以1开头60结束的记录并且长度是7位。

 

  1. select * from fzq where value like '1____60';  
  2. select * from fzq where regexp_like(value,'1....60'); 

 

--查询value中以1开头60结束的记录并且长度是7位并且全部是数字的记录。

--使用like就不是很好实现了。

 

  1. select * from fzq where regexp_like(value,'1[0-9]{4}60');   
  2. select * from fzq where regexp_like(value,'1[[:digit:]]{4}60'); 

 

-- 查询value中不是纯数字的记录

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

-- 查询value中不包含任何数字的记录。

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

--查询以12或者1b开头的记录.不区分大小写。

select * from fzq where regexp_like(value,'^1[2b]','i');

--查询以12或者1b开头的记录.区分大小写。

 

  1. select * from fzq where regexp_like(value,'^1[2B]'); select * from fzq where regexp_like(value,'[[:space:]]');   
  2. select * from fzq where regexp_like(value,'^([a-z]+|[0-9]+)$'); select * from fzq where regexp_like(value,'[[:punct:]]'); 

 

例子:判断姓名是否为空,少于两个字符,包含数字和字母

 

  1. create or replace  
  2. FUNCTION CheckName(NameStr in VARCHAR2) RETURN integer  
  3. As  
  4. BEGIN  
  5. --符合返回1,不符合返回0  
  6. if(NameStr is null or length(NameStr)<2) then  
  7. return 0;  
  8. else  
  9. if(NameStr like '%未取名%') then  
  10. RETURN 0;  
  11. end if;  
  12. if regexp_like(NameStr,'^([a-z]+|[0-9]+|[A-Z]+)$') then  
  13. return 0;  
  14. end if;   
  15. return 1;   
  16. end if;  
  17. END CheckName; 

 

关于Oracle regexp_like的相关知识及使用示例的知识就介绍到这里了,希望本次的介绍能够对您有所帮助。

【编辑推荐】

  1. Oracle 11g R2数据库示例用户安装说明
  2. Oracle 11g数据库审计功能应用实例解析
  3. Oracle 11g数据库默认审计选项说明详解
  4. Oracle 11g数据库使用XML Table的BUG解决
  5. PowerDesigner15连接Oracle出错的解决方案
责任编辑:赵鹏 来源: 火魔网
相关推荐

2011-08-17 16:11:02

Oracle 10g正REGEXP_LIKE

2011-08-23 14:47:29

Oracle 10g内共享池

2010-04-26 11:37:25

Oracle merg

2011-04-08 15:50:54

Oracleover函数

2021-01-04 09:50:09

前端数据技术

2011-08-18 17:05:16

Oracle数据库的服

2022-12-19 15:16:46

机器学习模型

2011-09-02 10:37:15

Oraclesqlload用法

2018-03-19 08:47:24

Linux命令磁盘使用

2011-09-02 11:23:54

ADSL网速带宽测试网速测试

2010-04-22 16:58:21

Oracle PLSQL

2009-08-27 15:53:30

C#中using wo

2010-01-04 15:02:34

Ubuntu管理

2011-08-29 15:04:05

修改GLOBAL_NADBLINK

2010-09-07 15:54:47

SQL语句LIKE

2017-03-01 11:46:24

Linuxscreen命令示例

2011-08-23 14:14:02

Oracle EBS二

2010-01-06 10:58:06

建立JavaScrip

2009-09-14 09:49:07

CCNA认证CCNA

2010-04-21 16:58:04

Oracle PL
点赞
收藏

51CTO技术栈公众号