【问题标题】:How to replace escape special characters while substring replacing in Oracle?在 Oracle 中替换子字符串时如何替换转义特殊字符?
【发布时间】:2019-09-13 10:20:34
【问题描述】:

有一个带有单词和 word_id 的临时表。临时表中有带有特殊字符的单词,例如 . , - . word_id 是从转义特殊字符的主表中更新的。

例如,我们有“数字”。 &“数字-”在临时表中。 main_table 有数字和数字。

我需要将临时表中的单词替换为 www.xxx.com/"word"(不带特殊字符)/"word_id"。由于临时表有“数字”。我希望它是“www.xxx.com/digits/123”。需要保留开头/结尾的特殊字符。

update temp set temp.word = '<a href=www.xxx.com/'||temp.word||'/'||temp.word_id where temp.word where temp.word_id is not null;

此代码给出 www.xxx.com/digits./123,但我希望它是 www.xxx.com/digits/123。

Here is the test data:

CREATE TABLE TEMP
   (ID NUMBER,
    WORD VARCHAR2(4000 BYTE),
    WORD_ID NUMBER
);

CREATE TABLE main_table
   (ID NUMBER,
    WORD VARCHAR2(4000 BYTE));

insert into temp(id,word) values (1, 'digits.');
insert into temp(id,word) values (2, '.numbers-');

insert into main_table values(111, 'digits');
insert into main_table values(222, 'numbers');

临时表看起来像

ID    WORD      WORD_ID
1     digits.    111
2     numbers-   222

The expected outcome is

ID    WORD      WORD_ID
1     www.xxx.com/digits/111.    111
2     www.xxx.com/numbers/222-   222

【问题讨论】:

  • www.xxx.com/numbers/222- 222后面有一个破折号吗?
  • 那是因为我们有数字- 。我只需要替换数字并按原样保留破折号。开头/结尾处的任何特殊字符。
  • 我不明白,我似乎无法将您预期输出中的数据与两个源表相关联。
  • 例如:有一句话“数字 8 和 9 是数字。”我将每个单词按空格分解为临时表中的行。所以最后一行是“数字”。我需要将其替换为 www.xxx.com/digits/111 并应在末尾保留特殊字符,因为我必须合并所有行以形成句子但带有链接。我们根据业务需求采取了这种方法。希望这会有所帮助!

标签: regex oracle replace substring


【解决方案1】:

可以试试 REPLACE 命令

update temp set temp.word = '<a href=www.xxx.com/'||
REPLACE(REPLACE(REPLACE(temp.word,'.',''),'-',''),',','')
||'/'||temp.word_id where temp.word_id is not null;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-24
    • 2011-05-16
    • 2016-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-07
    相关资源
    最近更新 更多