SQL学习(一)正则表达式

来源:互联网 发布:python 字符串截取函数 编辑:程序博客网 时间:2024/06/07 03:49

名称解释

      正则表达式Regular Expression Support)通常是被用来检索或替换那些符合某个模式的文本内容一个公式。许多程序设计语言都支持利用正则表达式进行字符串操作,是一个处理文本非常有用的工具。oracle10g以前,我们在处理文本字符的时候,往往需要通过likesubstrinstrreplace组合实现,比较麻烦,而oracle10g开始,可以通过REGEXP_LIKEREGEXP_REPLACEREGEXP_INSTRREGEXP_SUBSTR结合正则表达式的元字符,对文本进行简单的检索和替换,下面我们就对其进行简单的介绍和举例。

元字符

      上面我们讲到了元字符,那什么是元字符呢?元字符是特殊字符,在正则表达式中具有特殊意义,如通配字符,重复字符,非匹配符或字符的范围等等。您可以使用多种预定义的模式匹配元字符,下面我们把正则表达式的元字符及其描述列举如下:

         

    接下来我们来对如何使用这些元字符举几个简单的例子。

      问题一:找到’abc’字符串

      解决:[abc]   意思就是必须匹配abc

      匹配:’abc’

      不匹配:’abd’

      问题二:找到’a’之后是任意字符,其次是’c’的字符

      元字符中’.’代表任意非空的字符

      方法:[a.c]    意思是必须匹配a中间是任意非空字符c结尾

      匹配:’abc’

      匹配:’adc’

      匹配:’afc’

      匹配:’a2c’

      不匹配:’abb’

      问题三:找到一次或者多次出现了’a’的字符

      元字符中’+’代表字符出现1次或者多次

      方法:[a+]   意思是出现1次或者多次a的字符

      匹配:’a’

      匹配:’aa’

      不匹配:’bbb’

      通过上面的例子,我们大概就应该知道了元字符的运用,合理的进行组合这些元字符,能够满足一些复杂的要求,在oracle 10g中要运用这些元字符,必须在其提供的正则表达式函数中引用,下面我们就介绍下前面也提到的4个正则表达式函数。

正则表达式函数

      在第一段的时候我们就提到了,Oracle 10g开始,提供了REGEXP_LIKEREGEXP_REPLACEREGEXP_INSTRREGEXP_SUBSTR四个函数来进行正则表达式的应用,他们的具体描述见下表:

他们的语法如下:

REGEXP_LIKE

语法:

REGEXP_LIKE (srcstr, pattern [,match_option])

例子:Select * From人员表 Where REGEXP_LIKE (姓名, '^(.)$')

说明:1.起点必须整个字符串匹配2.中间可以是任意字符3.$结尾必须整个字符串匹配,本例想匹配的结果人员姓名是开头,结尾,中间是任意字符的人员。

结果:

REGEXP_INSTR

语法:

REGEXP_INSTR(srcstr,pattern[,position[,occurrence[,return_option[, match_option]]]])

例子:Select姓名, Regexp_Instr(姓名, '[^[:alpha:]]') From人员表 Where Regexp_Instr(姓名, '[^[:alpha:]]') > 1;

说明:找到第一个非字符在姓名中出现的位置

结果:

注:这里我们看到,空格也算非字符

REGEXP_SUBSTR

语法:

REGEXP_SUBSTR(srcstr,pattern[,position[,occurrence[,match_option]]])

例子:SELECT规格,REGEXP_SUBSTR(规格 , '[^]+') As 剂量FROM 收费细目;

说明:返回规格中1个或者多个字符,直到出现

结果:

REGEXP_REPLACE

语法:

REGEXP_REPLACE(srcstr, pattern[,replacestr[,position [, occurrence [, match_option]]]])

例子:Select费用类型,REGEXP_replace(费用类型,'(.)','\1 ') As替代 From 收费细目

说明:在每个字符后面加一个空格

结果:

    通过上面的举例,大家了解了正则函数一些最简单的应用,在实际工作中,如果想实现一些复杂的应用,就需要我们对元字符和表达函数的进行合理组合,大家可以下来多尝试下。

检查约束

      除了上面的应用,Oracle还提供了正则表达式的在表中的检查约束的应用,这里给大家简单的举个例子。

      我们HIS系统中的人员表有个字段是电子邮件,一般情况下电子邮件的格式应该是xxx@xxx.com等,必定有个特殊字符@,我们就可以在这个字段创建检查约束,对其进行检查,语句如下:

ALTER TABLE 人员表 ADD CONSTRAINT电子邮件   CHECK(REGEXP_LIKE(电子邮件,'@')) NOVALIDATE

      这样,我们在人员表的电子邮件字段就建了一个检查约束,当我们要插入人员表的电子邮件字段数据时候,就会检查变更的字段是否有’@’特殊字符,如果没有就不允许插入和修改,如下:

结语

      通过前面的介绍,大家对oracle 10g的正则表达式有了一些简单的认识,以后在写复杂报表的时候就会多一种选择,如果想要熟练的运用,就需要各位在实际工作中多多的练习和揣摩

原创粉丝点击