oracle中正则的使用

目录

oracle中正则使用:

模式匹配

条件查询


备份表时候,oracle11g的表名最长是30个字符,所以当备份的时候,加上前缀bak_0712这种就不行了,如果需要备份的表比较多的时候,挨个重

命名很麻烦,(命名本身就是一个很让人头疼的事情),所以我直接采用首字母的方式

例如原表名为 'TD_RESOURCE_MODIFY_RECORD'

那么备份表为:BAK_0712_TD_RESOURCE_MODIFY_RECORD 这个太长了,重命名成:BAK_0712_T_R_M_R

关键在于正则表达式怎么写:

select regexp_replace('BAK_0712_TD_RESOURCE_MODIFY_RECORD','_([[:alpha:]])[[:alpha:]]+','_\1',8) from dual

分析:

regexp_replace函数各参数意义见https://blog.csdn.net/gxftry1st/article/details/22489275 ,

 

语法

说明

REGEXP_REPLACE(source_string, pattern
[, replace_string [, position
[,occurrence, [match_parameter]]]])

该函数用一个指定的 replace_string 来替换匹配的模式,从而允许复杂的"搜索并替换"操作。

第一个是参数是原字符串

第二个是pattern

第三个是替换的字符

第四个是从哪个位置开始

第五个是第几次匹配的时候替换

第六个不清楚,没用到

分析我构造的正则:

'_([[:alpha:]])[[:alpha:]]+'

这边是找到_字符,后面跟着一个字母,然后再跟着若干个字母,其中第一个字母是\1,(正则中圆括号用于分组,按顺序分别是第一组,第二组..)

要替换的就是只留下_加上第一组(即首字母),

开始的位置我定的是从第8个字符开始匹配,没有第五个参数,即后面的都替换

就可以达到效果,如果只想替换单个的,比如第二次匹配的及,可以用

select regexp_replace('BAK_0712_TD_RESOURCE_MODIFY_RECORD','_([[:alpha:]])[[:alpha:]]+','_\1',8,2) from dual
这样就是只替换resource了,结果为:

BAK_0712_TD_R_MODIFY_RECORD

条件查询

SELECT a.bloc_code
FROM tbl_xxx a
WHERE a.bloc_code IS NOT NULL
	AND substr(a.bloc_code, 2, 6) = #{dimArea
	,jdbcType = VARCHAR}
	AND regexp_like(a.bloc_code, '^Y[[:digit:]]{6}[[:digit:]]{5}$')

UNION

SELECT b.sales_code bloc_code
FROM tbl_xxx2 b
WHERE b.sales_code IS NOT NULL
	AND substr(b.sales_code, 2, 6) = #{dimArea
	,jdbcType = VARCHAR}
	AND regexp_like(b.sales_code, '^Y[[:digit:]]{6}[[:digit:]]{5}$')
ORDER BY bloc_code

这种比较简单,找到以Y开头+6位数字+5位数字的数据

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值