Oracle中正则表达式的使用

        关于正则表达式,在我之前的博客有写过,可以参考学习,传送门https://blog.csdn.net/qq_41061437/article/details/82258431。我们在使用数据库的时候,有时候会进行一些模糊查询,像MySql、SQL Server、Oracle中都有like语句的使用。最近因为一些业务原因,需要在Oracle中使用到正则表达式来进行一系列的匹配。

        在Oracle中使用正则表达式用到四个函数,分别是:

        regexp_like(string,pattern,match_paramater)

        如果第一个参数能够匹配第二个参数所代表的正则表达式,返回true,否则返回false。

        string表示需要匹配的字符串,pattern表示正则表达式,[可选]match_paramater——>c:执行区分大小写的匹配;i:执行不区分大小写的匹配;x:忽略空格字符,默认情况下,空白字符与其他任何字符匹配。

        regexp_substr(string,pattern,[start_position],[nth_appearance],[match_paramater])

        返回正则表达式能够匹配到的字符串。

        string表示需要匹配的字符串,pattern表示正则表达式,[可选]start_position表示从字符串的第[n]个位置开始匹配,默认是1,[可选]nth——appearance表示获取第[n]个匹配结果,默认是1,[可选]match_paramater,同regexp_like。

        regexp_instr(string,pattern)

        返回第一个参数中,与第二个正则表达式参数匹配到的子串的位置。

        string表示需要匹配的字符串,pattern表示正则表达式。

        regexp_replace(string,pattern,replacement)

        用第三个参数替换掉第一个参数所匹配到的子串。

        string表示需要匹配的字符串,pattern表示正则表达式,replacement表示替换的字符串。

        下面我们来进行几个简单的使用:

        ①假设有一张表T1,其中有一列记录金额的列 C1,请匹配C1中金额以8开头,6结尾且是千万级别整数的记录。

        SELECT C1 FROM T1 WHERE REGEXP_LIKE(C1,'^8[0-9]{6}6$')

        ②假设有一张表T2,其中有一列C2是记录英文简称的,请匹配由纯字母组成且以G结尾,长度是4的记录的数量。

        SELECT COUNT(C2) FROM T2 WHERE REGEXP_LIKE(C2,'^[a-zA-Z]{3}[G]$')

        ③请使用REGEXP_SUBSTR匹配字符串‘as the most important thing is not my conversation but surely to be with you and to have you listening to me...’,给出三个固定顺序'is'、'with'、'surely',请匹配出字符串中与单词组对应的第2个匹配结果。

        REGEXP_SUBSTR('as the most important thing is not my conversation but surely to be with you and to have you listening to me...’,'(is|with|surely)',1,2,'i')

        匹配的答案是surely

        ④有以下字符串:'测试,明白的,9527,dog,70周年',请使用REGEXP_SUBSTR匹配到9527。

        REGEXP_SUBSTR('测试,明白的,9527,dog,70周年','[^,]+',1,4,'i')

        ⑤现在有个表T3,其中有一列C3,里面存储的是一些公司业绩的简要说明,比如:xx公司2015年第二季度收入33.33万元,同比增长1.2%。现在请使用REGEXP_SUBSTR函数查询出其中的收入,只要数字,而且只要是两位小数的的收入数字。

        SELECT REGEXP_SUBSTR(REGEXP_SUBSTR(C3,'收入\d+\.\d{2}万元'),'\d+\.\d{2}') FROM T3

        ⑥请使用REGEXP_INSTR函数查询出字符串'3.1415926'中'.'出现的位置。

        REGEXP_INSTR('3.1415926','\.')  

        结果是2

        ⑦请将字符串'Actually, this,principle,does,not,only,apply,to,animals, but,also,apply,to,human,beings'当中的所有','全部替换成空格' '。

        REGEXP_REPLACE('Actually, this,principle,does,not,only,apply,to,animals, but,also,apply,to,human,beings','\,',' ')

        以上就是关于Oracle中正则表达式的介绍以及使用。后期会将博主目前所学过的一些Oracle知识陆续写进博客中。

发布了165 篇原创文章 · 获赞 41 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/qq_41061437/article/details/100556803
今日推荐