比如有一段字符串:
  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如何可以实现这个功能?

解决方案 »

  1.   

    可以,你把TIMEID后面的空格看做字符串的一部分就可以了。“TIMEID ”然后把“TIMEID ”替换为“201205010000 ”。
    同理,比把“V_PART)”看一个字符串,替换为“PART_20120501)”
      

  2.   

    没有编辑权限
    第一个需要修改为:“^TIMEID ”,以为“TIMEID ”会匹配后面的那个。
      

  3.   


    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
      

  4.   


    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';