oracle正则表达式如何实现全字符匹配替换

落叶知秋秋 2012-06-22 12:56:34
比如有一段字符串:
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如何可以实现这个功能?
...全文
651 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
落叶知秋秋 2012-07-06
  • 打赏
  • 举报
回复

V_SQL := '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';
落叶知秋秋 2012-07-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼  的回复:]

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_REPLA……
[/Quote]


我那是一整个字符串,不是一个个单词
renfengjun 2012-06-25
  • 打赏
  • 举报
回复

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

面无表情 2012-06-25
  • 打赏
  • 举报
回复
没有编辑权限。。。
第一个需要修改为:“^TIMEID ”,以为“TIMEID ”会匹配后面的那个。
面无表情 2012-06-25
  • 打赏
  • 举报
回复
可以,你把TIMEID后面的空格看做字符串的一部分就可以了。“TIMEID ”然后把“TIMEID ”替换为“201205010000 ”。
同理,比把“V_PART)”看一个字符串,替换为“PART_20120501)”

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧