日期:2014-05-16  浏览次数:21117 次

oracle正则表达式如何实现全字符匹配替换
比如有一段字符串:
  TIMEID >= :V_TIMEID AND 
  TIMEID < :V_TIMEID_END
  PARTITION(:V_PART) A,
  PARTITION(:V_PART_MONTH) B,
  PARTITION(:V_PART_MONTH) C,
  PARTITION(:V_PART_MONTH) D
希望
把:V_TIMEID替换成201205010000,:V_TIMEID_END不能被替换,
把:V_PART替换成PART_20120501,:V_PART_MONTH不能被替换

REPLACE函数好像不能达到这个目的,REGEXP_REPLACE如何可以实现这个功能?

------解决方案--------------------
可以,你把TIMEID后面的空格看做字符串的一部分就可以了。“TIMEID ”然后把“TIMEID ”替换为“201205010000 ”。
同理,比把“V_PART)”看一个字符串,替换为“PART_20120501)”
------解决方案--------------------
没有编辑权限。。。
第一个需要修改为:“^TIMEID ”,以为“TIMEID ”会匹配后面的那个。
------解决方案--------------------
SQL code

with regexp_test(str) as (
select 'V_TIMEID' from dual
union
select 'V_TIMEID_END' from dual
union
select 'V_PART' from dual
union
select 'V_PART_MONTH' from dual
)
select str,REGEXP_REPLACE(REGEXP_REPLACE(str,'^V_TIMEID$','201205010000'),'^V_PART$','PART_20120501') as replaced from regexp_test t 
/

STR          REPLACED
------------ --------------------
V_PART       PART_20120501
V_PART_MONTH V_PART_MONTH
V_TIMEID     201205010000
V_TIMEID_END V_TIMEID_END