使用正则表达式的Oracle更新

By simon at 2018-02-07 • 0人收藏 • 40人看过

我在列中有一些值: “这是测试$ ABC变量。” 我想把所有的变量定义更新到下面的一个: “这是测试$ ABC $变量。“ 我怎样才能写这个更新声明?不知何故,我无法管理。

3 个回复 | 最后更新于 2018-02-07
2018-02-07   #1

你只想要replace()吗?

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

2018-02-07   #2

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

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>

2018-02-07   #3

您可以使用此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$

登录后方可回帖

Loading...