我爱编程

Oracle正则表达式

2017-09-13  本文已影响0人  是阿离

问题

想要查询tableName结尾不为6位数字的表

解决方案

1、最开始用的py脚本通过截取数字类型组成串,判断串的长度来做的……
2、使用Oracle sql正则表达式

Oracle sql正则表达式

ORACLE中的支持正则表达式的函数主要有下面四个:

1,REGEXP_LIKE :与LIKE的功能相似

2,REGEXP_INSTR :与INSTR的功能相似

3,REGEXP_SUBSTR :与SUBSTR的功能相似

4,REGEXP_REPLACE :与REPLACE的功能相似

1、正则表达式中的元字符

元字符 意思 例子 
说明要匹配的字符是一个特殊字符、常量或者后者引用。(后引用重复上一次的匹配) n 匹配换行符
\ 匹配 
( 匹配 (
) 匹配 ) 
^ 匹配字符串的开头位置 如果A是字符串的第一个字符,^A 匹配 A 
$ 匹配字符串的末尾位置 如果B是字符串的最后一个字符,$B 匹配 B 
* 匹配前面的字符0次或多次 ba*rk可以匹配 brk、bark、baark等等 
+ 匹配前面的字符1次或多次 ba+rk可以匹配 bark、baark等等,但是不能匹配brk,也就是说,最少有以一次。 
? 匹配前面的字符0次或1次 ba?rk可以匹配 bark、brk等等,但是不能匹配baark。 
{n} 匹配前面的字符恰好是n次,其中n是整数 hob{2}it可以匹配hobbit 
{n,m} 匹配前面的字符至少是n次,最多是m次,其中n,m都是整数 hob{2,3}it可以匹配hobbit或者hobbbit 
. 匹配除null以外的任意单个字符 hob.it中的.可以是任意的单个字符,如:hobsit等等 
(pattern) 括号中pattern是一个子正则表达式,匹配指定pattern模式的一个子表达式。 如:aaa(x|y)可以匹配aaax或者aaay。 
x|y 匹配“或” x|y可以匹配x或者y 
[abc] 可以匹配abc中的任何单个字符 hello[abc]可以匹配helloa,hellob,helloc 
[a-z] 可以匹配指定范围内的任何单个字符 hell[a-z]可以匹配hello或者hellz 
[::] 指定一个字符类,可以匹配该类中的任何字符 [:alphanum:]可以匹配字符0-9、A-Z、a-z
[:alpha:]可以匹配字符A-Z、a-z
[:blank:]可以匹配空格或tab键
[:digit:]可以匹配数字0-9
[:graph:]可以匹配非空字符
[:lower:]可以匹配小写字母a-z
[:print:]与[:graph:]类似,不同之处在于[:print:]包括空格字符
[:punct:]可以匹配标点符号.,""等等
[:space:]可以匹配所有的空字符
[:upper:]可以匹配大写字母A-Z
[:xdigit:]可以匹配十六进制数字0-9、A-F、a-f 
n 这是对前一次匹配命中的一个后引用,其中n是一个正整数 (.)1可以匹配两个连续相同的非空字符。(.)可以匹配除null以外的任何单个字符,而1则重复上一次匹配的内容,即再次匹配相同的字符,因此可以匹配两个连续相同的非空字符

2、REGEXP_LIKE(x,pattern[,match_option])用于在x中查找正则表达式pattern,该函数还可以提供一个可选的参数match_option字符串说明默认的匹配选项。match_option的取值如下:

 ‘c’   说明在进行匹配时区分大小写(缺省值);
  'i'   说明在进行匹配时不区分大小写;
  'n'   允许使用可以匹配任意字符的操作符;
  'm'   将x作为一个包含多行的字符串。

问题解决样例

SELECT owner, t.segment_name, t.segment_type, sum(t.bytes / 1024 / 1024) "占用空间(M)"
from dba_segments t
where t.segment_type='TABLE'
AND t.owner = 'MY_USER'
--AND regexp_like(t.segment_name, '*[A-Z]$')
AND NOT regexp_like(t.segment_name, '*[0-9]{4,6}$')  --使用NOT取非

样例二:将字段中的多个空格与换行替换为单个空格

SELECT t.redis_colony_id,
       REGEXP_REPLACE(t.redis_colony_message, '([[:space:]]+)', ' '),
       REPLACE(t.redis_colony_message,chr(10),',')
FROM t_redis_colony_tst t
ORDER BY t.redis_colony_id
;

参考文章

oracle正则表达式函数 匹配(含有样例)

上一篇下一篇

猜你喜欢

热点阅读