具有正则表达式的Oracle Update

时间:2018-02-06 13:21:31

标签: sql regex oracle

我在列中有一些值,如:

"这是测试$ ABC变量。"

我想将所有变量定义更新到一个以下:

"这是测试$ ABC $变量。"

如何编写此更新语句?不知何故,我无法管理。

3 个答案:

答案 0 :(得分:0)

你只想要replace()吗?

update t
    set col = replace(col, '$ABC', '$ABC$')
     where col like '%$ABC%';

答案 1 :(得分:0)

不幸的是,我不擅长正则表达式,所以我的这种糟糕的尝试可能会被更聪明的东西所取代。期待看到它!

SQL> with test as
  2    (select 'This is test $ABC variables' col from dual union
  3     select 'Stackoverflow says $DEF is so cool' from dual
  4    )
  5  select
  6    col,
  7    regexp_replace(col, '\$\w+',  regexp_substr(col, '\$\w+') || '$') result
  8  from test;

COL                                RESULT
---------------------------------- ----------------------------------------
Stackoverflow says $DEF is so cool Stackoverflow says $DEF$ is so cool
This is test $ABC variables        This is test $ABC$ variables

SQL>

答案 2 :(得分:0)

您可以使用此REGEXP查询。 '\$(\w+)'中的括号捕获$

\1后面的字词
SELECT REGEXP_REPLACE (
          'This is test $ABC variables.This is a second variable $variable2.I have 100$',
          '\$(\w+)',
          '$\1$')
  FROM DUAL;

<强> O / P:

This is test $ABC$ variables.This is a second variable $variable2$.I have 100$