Oracle10g正则表达式及常用函数汇总

合集下载

oracle regexp语法

oracle regexp语法

oracle regexp语法Oracle正则表达式语法一、引言正则表达式是一种强大的文本匹配工具,用于在文本中查找、匹配和替换符合特定模式的字符串。

Oracle数据库提供了一套强大的正则表达式函数和操作符,可以方便地在数据库中进行模式匹配操作。

本文将介绍Oracle正则表达式的语法及常用函数,帮助读者更好地理解和应用正则表达式。

二、正则表达式基础1. 字符匹配正则表达式中的基本元字符可以用于匹配特定的字符,例如:- \d:匹配任意一个数字字符;- \w:匹配任意一个字母、数字或下划线字符;- \s:匹配任意一个空白字符。

2. 重复匹配正则表达式中的重复匹配符号用于匹配重复出现的字符,例如:- *:匹配前一个字符的零个或多个重复;- +:匹配前一个字符的一个或多个重复;- ?:匹配前一个字符的零个或一个重复。

3. 边界匹配正则表达式中的边界匹配符号用于匹配字符串的边界,例如:- ^:匹配字符串的开始位置;- $:匹配字符串的结束位置;- \b:匹配一个单词边界。

4. 分组匹配正则表达式中的分组机制用于将多个字符组合在一起进行匹配,例如:- (pattern):将pattern作为一个分组进行匹配;- (pattern1|pattern2):匹配pattern1或pattern2。

三、Oracle正则表达式函数1. REGEXP_LIKEREGEXP_LIKE函数用于判断一个字符串是否匹配某个正则表达式,语法如下:```sqlREGEXP_LIKE(source_string, pattern)```其中,source_string为待匹配的字符串,pattern为正则表达式。

2. REGEXP_REPLACEREGEXP_REPLACE函数用于将一个字符串中符合某个正则表达式的部分替换为指定的字符串,语法如下:```sqlREGEXP_REPLACE(source_string, pattern, replace_string)```其中,source_string为待替换的字符串,pattern为正则表达式,replace_string为要替换的字符串。

oracle的正则表达式应用-课件

oracle的正则表达式应用-课件

IT综合服务提供商 IT综合服务提供商 The Integrated Providers of IT Service
创新、沟通、 创新、沟通、追求卓越 14
Regexp_like的使用方法
• Select * from test_table • Where regexp_like(name,’^[0-9]{1,3}.[09]{1,3}.[0-9]{1,3}.[0-9]{1,3}$’)
IT综合服务提供商 IT综合服务提供商 The Integrated Providers of IT Service
创新、沟通、 创新、沟通、追求卓越 11
Regexp_like的用方法
• select * from test_table • where regexp_like(field_1,'[0-9]') • select * from test_table • where regexp_like(field_1,'[A-z]')
IT综合服务提供商 IT综合服务提供商 The Integrated Providers of IT Service
创新、沟通、 创新、沟通、追求卓越 12
Regexp_like的使用方法
• select * from test_table • where regexp_like(name,'[[:alpha:]]') • select * from test_table • where regexp_like(name,'[[:alnum:]]')
IT综合服务提供商 IT综合服务提供商 The Integrated Providers of IT Service

Oracle函数大全

Oracle函数大全

附录ⅡOracle11g SQL函数函数名 返回类型说明字符串函数ASCII(s) 数值 返回s首位字母的ASCII码CHR(i) 字符 返回数值i的ASCII字符CONCAT(s1,s2) 字符 将s2连接到字符串s1的后面INITCAP(s) 字符 将每个单词首位字母大写其它字母小写 INSTR(s1,s2[,i[,j]]) 数值 返回s2在s1中第i位开始第j次出现的位置 INSTRB(s1,s2[,i[,j]]) 数值 与INSTR(s)函数相同,但按字节计算 LENGTH(s) 数值 返回s的长度。

LENGTHb(s) 数值 与LENGTH(s)相同,但按字节计算。

lower(s) 字符 返回s的小写字符LPAD(s1,i[,s2]) 字符 在s1的左侧用s2字符串补足到总长度i LTRIM(s1,s2) 字符 循环去掉在s2中存在的s1左边字符RPAD(s1,i[,s2]) 字符 在s1的右侧用s2字符串补足到总长度i RTRIM(s1,s2) 字符 循环去掉在s2中存在的s1右边字符 REPLACE(s1,s2[,s3]) 字符 用s3替换出现在s1中的s2REVERSE(s) 字符 返回s倒排的字符串SUBSTR(s,i[,j]) 字符 从s的第i位开始截得长度j的子字符串 SUBSTRB(s,i[,j]) 字符 与SUBSTR相同,但i,j按字节计算。

SOUNDEX(s) 返回与s发音相似的词TRANSLATE(s1,s2,s3) 字符 将s1中与s2相同的字符以s3代替TRIM(s) 字符 删除s的首部和尾部空格UPPER(s) 字符 返回s的大写正则表达式函数REGEXP_LIKE() 布尔 功能与LIKE的功能相似REGEXP_INSTR() 数值 功能与INSTR的功能相似REGEXP_SUBSTR() 字符 功能与SUBSTR的功能相似REGEXP_REPLACE() 字符 功能与REPLACE的功能相似数字函数ABS(i) 数值 返回i的绝对值ACOS(i) 数值 反余玄函数,返回-1到1之间的数ASIN(i) 数值 反正玄函数,返回-1到1之间的数ATAN(i) 数值 反正切函数,返回i的反正切值CEIL(i) 数值 返回大于或等于n的最小整数COS(i) 数值 返回n的余玄值COSH(i) 数值 返回n的双曲余玄值EXP(i) 数值 返回e的i次幂,e=2.71828183FLOOR(i) 数值 返回小于等于i的最大整数LN(i) 数值 返回i的自然对数,i>0LOG(i,j) 数值 返回以i为底j的对数MOD(i) 数值 返回i除以j的余数POWER(i,j) 数值 返回i的j次方ROUND(i,j) 数值 返回i四舍五入值,j是小数点位数SIGN(i) 数值 i>0返回1,i=0返回0,i<0返回-1SIN(i) 数值 返回i的正玄值SINH(i) 数值 返回i的双曲正玄值SQRT(i) 数值 返回i的平方根TAN(i) 数值 返回i的正切值TANH(i) 数值 返回i的双曲正切值TRUNC(I,j) 数值 返回i的结尾值,j可正、零、负数转换函数CONVERT(s,ds,ss) 字符 将s,由ss字符集转换为ds字符集HEXTORAW(s) 字符 将16进制的s转换为RAW数据类型。

第21章 Oracle中的正则表达式

第21章  Oracle中的正则表达式

21.4
本章实例
在进行正则表达式匹配时,还可以忽略字符大小写形 式进行匹配。这是比使用LIKE判式更加灵活和方便之处。 select * from people where regexp_like(name, 'or'); select * from people where regexp_like(name, 'or', 'i');
21.2.6
Oracle中正则表达式的特殊性
[[:alnum:]]:表示任意字母和数字。 [[:space:]]:表示任意空白字符,正则表达式的一般语 法为\s。
[[:upper:]]:表示任意大写字母。
[[:punct:]]:表示任意标点符号。 [[:xdigit:]]:表示任意16进制的数字,相当于[0-9a-fAF]。
21.3 正则都提供了对正则表达式的支 持。而这种支持,主要是通过提供函数来体现的。Oracle中 共有四个正则表达式相关函数,它们分别是: regexp_like()


regexp_instr()
regexp_substr() regexp_replace()
21.6
习题
1.简述正则表达式与通配符的区别。 2.简述正则表达式匹配时的贪婪原则。 3.简述Oracle正则表达式的特殊性。
4.利用regexp_replace()函数将YYYY-MM-DD格式 的字符串,转换为MM/DD/YYYY格式。
22.1.2
正则表达式与编程语言
在各种编程语言中,可以说,正则表达式是无处不在 的。正则表达式在各种编程语言中高度统一,都遵循一致的 语法。因此,一旦熟悉了一种编程语言中的正则表达式,那 么,可以直接应用于其他编程语言。编程语言同时也是正则 表达式的载体,没有编程语言,正则表达式的作用将无从发 印

Oracle 10g - 常用SQL函数

Oracle 10g - 常用SQL函数

Oracle 10g - 常用SQL函数Oracle常用函数数字函数ABS()语法说明示例 ABS(x) 返回x的绝对值。

ACOS()语法说明示例 ACOS(x) 返回x的反余弦值。

x应该是从-1到1之间的数,并且输出值从0到Pi,以弧度为单位。

ASIN()语法说明示例 ASIN(x) 返回x的反正弦值。

x应该是从-1到1之间的数,并且输出值从-Pi/2到Pi/2,以弧度为单位。

ATAN(x)语法说明示例 ATAN(x) 返回x的反正切值。

输出值是从-Pi/2到Pi/2,以弧度为单位。

ATAN2(x, y)语法说明 ATAN2(x, y) 返回x和y的反正切值。

输出值是从-Pi到Pi,取决于x和y的符号,以弧度为单位。

ATAN2(x, y)和ATAN(x/y)是完全相同的。

示例 CEIL()语法 CEIL(x) 说明示例返回大于或等于x的最小整数值。

COS()语法说明示例 COS(x) 返回x的余弦值。

x是以弧度表达的角度。

COSH()语法说明示例 COSH(x) 返回x的双曲余弦值。

x是以弧度表达的角度。

EXP语法说明示例 EXP(x) 返回e的x次幂。

e = 2.71828183… FLOOR()语法说明示例 FLOOR(x) 返回小于或等于x的最大整数值。

LN()语法说明示例 LN(x) 返回x的自然对数值。

x必须大于0。

LOG()语法说明示例 LOG(x, y) 返回以x为底的y的对数。

x必须是不为0和1的正数,y可以是任意正数。

MOD()语法说明示例 MOD(x, y) 返回x除以y的余数。

如果y是0,则返回x。

MEDIAN语法说明 MEDIAN(column) MEDIAN函数用于返回一个数据集合的中间值。

中间值的定义是,集合中大于它的元素数目与小于它的元素数目相同)MEDIAN 是通过对集合进行排序,然后选择中间元素的。

示例比如部门20中所有员工的工资集合为:SAL ---------- 800 1100 2975 3000 3000 6000 8000 它们的中间值为: select median(sal) from emp where deptno =20; MEDIAN(SAL) -------------------------------------- 3000POWER()语法说明 POWER(x, y) 返回x的y次幂。

oracle正则表达式用法

oracle正则表达式用法

Oracle正则表达式基于Perl语言的正则表达式语法,其基本语法和使用方法如下:1. 字符匹配:* .:匹配除了换行外的任意一个字符。

* \d:匹配任何数字,相当于[0-9]。

* \D:匹配任何非数字字符,相当于[^0-9]。

* \w:匹配任何字母数字字符或下划线,相当于[a-zA-Z0-9_]。

* \W:表示匹配任何非字母数字字符或下划线,相当于[^a-zA-Z0-9_]。

2. 限定符:* *:匹配前一个字符出现0次或多次。

* +:匹配前一个字符出现1次或多次。

* ?:匹配前一个字符出现0次或1次。

* {n}:匹配前一个字符出现n次。

* {n,}:匹配前一个字符出现n次或更多。

* {n,m}:匹配前一个字符出现n~m次。

3. 边界匹配:* ^:匹配开始位置。

* $:匹配结束位置。

* \b:匹配单词边界,即单词的开头或结尾位置。

* \B:匹配非单词边界,即不是单词的开头或结尾位置。

4. 分组和引用:* ( ):分组,标记一个子表达式的开始和结束位置。

* \num:引用第num个子表达式,num从1开始。

5. 字符集合:[]表示一组字符中的任意一个。

6. 转义符:\表示转义一个字符。

7. 其他高级语法支持:贪婪匹配、非贪婪匹配、零宽断言(zero-width assertion)、后向引用(backreference)、捕获组等。

另外,Oracle 10g支持正则表达式的四个新函数分别是REGEXP_LIKE、REGEXP_INSTR、REGEXP_SUBSTR和REGEXP_REPLACE,它们使用POSIX 正则表达式代替了老的百分号(%)和通配符(_)字符。

请注意,具体使用方法可能因不同的数据库版本或应用场景而有所不同。

建议查阅Oracle官方文档或相关教程以获取更详细和准确的信息。

oracle正则表达式用法 -回复

oracle正则表达式用法 -回复

oracle正则表达式用法-回复Oracle正则表达式用于在Oracle数据库中对字符串进行模式匹配和替换。

它提供了一种强大的方式来处理字符串数据,特别是在数据查询和数据转换方面。

在本文中,我们将一步一步地回答关于Oracle正则表达式的常见问题,以帮助读者更好地理解和使用它。

第一部分:正则表达式的基本概念和语法在使用Oracle正则表达式之前,我们需要了解一些基本概念和语法。

1.1 正则表达式是什么?正则表达式是一种用于匹配和搜索文本模式的工具。

它通过使用元字符和特殊字符来定义模式。

1.2 元字符是什么?元字符是正则表达式中具有特殊含义的字符。

常见的元字符包括^、、.、*、+、?、\、[]、{} 等。

1.3 什么是字符类别?字符类别是用于匹配字符的一组字符。

它们可以简化正则表达式的编写,并提供更具表达力的匹配方式。

在Oracle正则表达式中,可以使用一些预定义的字符类别,如\d(匹配数字)、\w(匹配字母数字字符)、\s(匹配空白字符)等。

1.4 什么是限定符?限定符是指定模式的数量的特殊字符。

它可以控制匹配的次数,如*(零次或多次)、+(一次或多次)、?(零次或一次)、{n}(恰好n次)、{n,}(至少n次)和{n,m}(至少n次且不超过m次)。

1.5 总结一下正则表达式的基本语法正则表达式的基本语法包括元字符、字符类别和限定符。

它结合使用这些元素来定义匹配和搜索模式。

第二部分:如何在Oracle中使用正则表达式函数现在我们将探讨如何在Oracle数据库中使用正则表达式函数。

2.1 Oracle中的正则表达式函数Oracle提供了一些内置函数,用于处理正则表达式操作。

常见的函数包括REGEXP_LIKE、REGEXP_REPLACE、REGEXP_INSTR、REGEXP_SUBSTR。

这些函数可以用来执行模式匹配、替换和提取操作。

2.2 REGEXP_LIKE函数REGEXP_LIKE函数用于检查一个字符串是否与指定的模式匹配。

orcl中用正则表达式

orcl中用正则表达式

orcl中用正则表达式在Oracle中,你可以使用正则表达式来执行各种字符串操作,例如搜索、替换、提取等。

Oracle的正则表达式功能主要通过`REGEXP_SUBSTR`、`REGEXP_INSTR`、`REGEXP_REPLACE`等函数提供。

以下是一些在Oracle中使用正则表达式的示例:1. 使用`REGEXP_SUBSTR`提取字符串假设你想从某个字符串中提取所有的数字:```sqlSELECT REGEXP_SUBSTR('abc123def456', '[0-9]+') FROM dual;```这会返回`123`和`456`。

2. 使用`REGEXP_INSTR`查找字符串查找某个字符串在另一个字符串中的位置:```sqlSELECT REGEXP_INSTR('abc123def456', '[0-9]+') FROM dual;```这会返回数字`4`,表示第一个数字(123)开始于位置4。

3. 使用`REGEXP_REPLACE`替换字符串替换所有匹配正则表达式的子串:```sqlSELECT REGEXP_REPLACE('abc123def456', '[0-9]+', 'XX') FROM dual;```这会返回`abcXXdefXX`。

4. 使用复杂的正则表达式例如,如果你想从字符串中提取所有由字母组成的子串:```sqlSELECT REGEXP_SUBSTR('abc123def456', '[a-zA-Z]+') FROM dual;```这会返回`abc`和`def`。

5. 分组和捕获使用括号进行分组和捕获:```sqlSELECT REGEXP_SUBSTR('abc123def456', '([a-z]+)([0-9]+)', 1, 1, NULL, 1) FROM dual;```这将返回`abc`,因为它是第一个匹配的子串。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

oracle的正则表达式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之外的任何单字符。

'?' 匹配前面的子表达式零次或一次。

'*' 匹配前面的子表达式零次或多次。

select regexp_replace('dsfsdfsf','a*','A')from dual AdAsAfAsAdAfAsAfA因为其可以匹配a没有出现的地方,所以在每个字符前面和后面都会插A,相当于将两个字符中间的空位也当做一次匹配select regexp_replace('adsfsdfsf','a*','A')from dual AAdAsAfAsAdAfAsAfA因为其可以匹配a没有出现的地方,所以在每个字符前面和后面都会插A,相当于将两个字符中间的空位也当做一次匹配,对于有a出现的地方再换成A正则表达式是最大限度匹配,会匹配所有能够匹配的字符串中长度最长的串Select REGEXP_REPLACE('aa bb cc','.*', 'A') FROM dual;把*后面的空格去掉显示结果为什么是两个A不是一个A因为其首先将匹配没有任何字符的情况加一个A,再对能匹配的最大字符串即aa bb cc换成ASelect REGEXP_REPLACE('aa bb cc','.* ', 'A') FROM dual;结果为Acc,注意表达式在.*后面有个空格'+' 匹配前面的子表达式一次或多次。

'( )' 标记一个子表达式的开始和结束位置。

正则表达式中括号的三种功能:1)限定多选结构的范围;如:ab(c|d|e)fgh,注意上述写法与去掉括号时abc|d|efgh 的区别2)标注量词作用的元素;如:ab(cde)+fgh,注意上述写法与去掉括号时abcde+fhg的区别3)为引用捕获文本;作为这个用法加括号是为了返回或引用匹配结果'[]' 标记一个中括号表达式。

可以用来指定可以取的字符范围,如[a-z],或者排除掉[]中的内容'{m,n}' 一个精确地出现次数范围,m=<出现次数<=n,'{m}'表示出现m次,'{m,}'表示至少出现m次。

'|' 指明两项之间的一个选择。

例子'^([a-z]+|[0-9]+)$'表示所有小写字母或数字组合成的字符串。

\num 匹配 num,其中 num 是一个正整数。

对所获取的匹配的引用。

正则表达式的一个很有用的特点是可以保存子表达式以后使用,被称为Backreferencing. 允许复杂的替换能力如调整一个模式到新的位置或者指示被代替的字符或者单词的位置. 被匹配的子表达式存储在临时缓冲区中,缓冲区从左到右编号, 通过\数字符号访问。

下面的例子列出了把名字 aa bb cc 变成cc, bb, aa.Select REGEXP_REPLACE('aa bb cc','(.*) (.*) (.*)', '\3, \2, \1') FROM dual;REGEXP_REPLACE('ELLENHILDISMITcc, bb, aa'\' 转义符。

字符簇:[[:alpha:]] 任何字母。

任何字符?[[:digit:]] 任何数字。

[[:alnum:]] 任何字母和数字。

任何字母?[[:space:]] 任何空白字符。

[[:upper:]] 任何大写字母。

[[:lower:]] 任何小写字母。

[[:punct:]] 任何标点符号。

[[:xdigit:]] 任何16进制的数字,相当于[0-9a-fA-F]。

各种操作符的运算优先级\ 转义符(), (?, (?=), [] 圆括号和方括号*, +, ?, {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_LIKEselect * from test where regexp_like(mc,'^a{1,3}');{}的意思是连续几个的匹配上面的sql的意思是开头有1个到3个连续aselect * from test where regexp_like(mc,'a{1,3}');有连续3个aselect * from test where regexp_like(mc,'^a.*e$');以a开头以e结尾的字符之所以有.是因为如果写成^a*e$就变成以a开头中间都是a以e结尾的字符拉 *的意思是匹配它前面的字符^ab*e$可否查出以a开头以e结尾的字符呢?答案是否定的因为*虽然是可以匹配前面的b0次或者多次但是它也仅仅是匹配以a开头中间可以有b并且都是b,或者中间没有字符,以e结尾的字符.'^[[:alpha:]]+$'的意思是以字母从开头到结尾都包含字母的字符select * from test where regexp_like(mc,'^[[:lower:]]|[[:digit:]]');小写字母或者数字开头的字符select * from test where regexp_like(mc,'^[[:lower:]]');小写字母开头的字符select mc FROM test Where REGEXP_LIKE(mc,'[^[:digit:]]');"^"就是一个有多种意义的字符元,主要看语意环境如果"^"是字符列中的第一个字符,就表示对这个字符串取反,因此, [^[:digit:]]就是表示查找非数字的模式即字符中不都是数字Select mc FROM test Where REGEXP_LIKE(mc,'^[^[:digit:]]');以非数字开头的字符二、REGEXP_INSTRSelect REGEXP_INSTR(mc,'[[:digit:]]$') from test;Select REGEXP_INSTR(mc,'[[:digit:]]+$') from test;Select REGEXP_INSTR('The price is $400.','\$[[:digit:]]+') FROM DUAL;Select REGEXP_INSTR('onetwothree','[^[[:lower:]]]') FROM DUAL;Select REGEXP_INSTR(',,,,,','[^,]*') FROM DUAL;Select REGEXP_INSTR(',,,,,','[^,]') FROM DUAL;三、REGEXP_SUBSTRSELECT REGEXP_SUBSTR(mc,'[a-z]+') FROM test;SELECT REGEXP_SUBSTR(mc,'[0-9]+') FROM test;SELECT REGEXP_SUBSTR('aababcde','^a.*b') FROM DUAL;四、REGEXP_REPLACESelect REGEXP_REPLACE('Joe Smith','( ){2,}', ',') AS RX_REPLACE FROM dual; Select REGEXP_REPLACE('aa bb cc','(.*) (.*) (.*)', '\3, \2, \1') FROM dual;其中\1,\2,\3表示第几个正则表达式如SELECT regexp_substr('Repuuublicc Of Africaa', '([a-z])\1', 1, 1, 'i') from dual请问,这句是取连续两个小写字母,如果想取连续三个小写字母怎么写啊SELECT regexp_substr('Repuuublicc Of Africaa', '([a-z])\1\1', 1, 1, 'i') from dual注:Regexp_substr的参数5个参数第一个是输入的字符串第二个是正则表达式第三个是标识从第几个字符开始正则表达式匹配。

相关文档
最新文档