首页 > 解决方案 > 如何在 Oracle 的 REGEXP_REPLACE 中使用列引用?

问题描述

我的脚本如下所示:

SELECT
    regexp_replace(column1,'"resId":([^"]+?)..','"resId":column2,"')
FROM
    table;

在这里,我需要将 column1 中的 resId 值替换为 column2 中的值。

标签: databaseoracleoracle11goracle12c

解决方案


如果没有样本数据和预期输出,很难说出您到底想要什么。

看来您希望转换这样的模式 -"resId":Value1,"otherid":othervalue

请注意,我考虑到 "resID":value数据中存在一个键值对,并且这些键值对之间有一个分隔符(空格或逗号)。

(,|$)表示 . 之后的逗号分隔符或行尾value。您可以将其更改为在数据中包含任何其与其他组合区分开来的分隔符。如果没有这样的东西并且数据比这更纯粹,您应该通过编辑您的问题来清楚地描述它,这可能有助于我们为您提供适当的解决方案。

SQL小提琴

查询

SELECT column1,
       column2,
       regexp_replace(column1,'"resId":[^"]+(,|$)','"resId":' || column2 || '\1') as replaced
FROM t

结果

|                             COLUMN1 | COLUMN2 |                            REPLACED |
|-------------------------------------|---------|-------------------------------------|
| "resId":Value1,"otherid":othervalue |  Value2 | "resId":Value2,"otherid":othervalue |
| "otherid":othervalue,"resId":Value1 |  Value2 | "otherid":othervalue,"resId":Value2 |

推荐阅读