关于正则表达式,在我之前的博客有写过,可以参考学习,传送门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知识陆续写进博客中。