【问题标题】:How to use REGEXP_REPLACE to remove parameters from function?如何使用 REGEXP_REPLACE 从函数中删除参数?
【发布时间】:2018-11-04 17:03:36
【问题描述】:

Image Here

我有一列存储 C# 代码,如何删除“FunctionA”的最后 3 个参数?请注意,该列包含多个函数,但我只需要使用 PL/SQL 替换“FunctionA”,我知道 REGEXP_REPLACE 可以解决问题,但我似乎找不到匹配/替换它的方法。

之前:

Test=FunctionA(varID, 1234,"", A.B,"","","last");

Test=FunctionA(varID, 9876,"", C.D);

Test=FunctionB(varID, 5555,"", E.F,"","","last");

之后:

Test=FunctionA(varID, 1234,"", A.B);

Test=FunctionA(varID, 9876,"", C.D);

Test=FunctionB(varID, 5555,"", E.F,"","","last");

【问题讨论】:

  • 我想补充一点,函数的参数值因每条记录而异,因此我不能使用 REPLACE 函数;我需要某种模式匹配并仅删除“FunctionA”的最后 3 个参数
  • 请编辑您的原始帖子并以纯文本形式包含“之前”数据,如图所示。作为一项规则,永远不要使用图像,因为试图帮助的人无法复制/粘贴来获取示例数据。您需要操作的字符串能否在数据块中多次出现?该数据是否包括回车/换行符还是一个长字符串?

标签: oracle replace plsql parameters regexp-replace


【解决方案1】:

试着找出这个模式:

(,[^,]*,[^,]*,[^,]*\);)$

然后只替换为);。这是一个示例查询:

SELECT
    REGEXP_REPLACE ('Test=FunctionA(varID, 1234,"", A.B,"","","last");',
        '(,[^,]*,[^,]*,[^,]*\);)$', ');') AS output
FROM dual
WHERE col LIKE 'Test=FunctionA(%'

Test=FunctionA(varID, 1234,"", A.B);

Demo

编辑:我添加了一个检查函数名称的WHERE 子句。

【讨论】:

  • 非常感谢它,但它会影响下面记录示例中的所有其他函数... SELECT REGEXP_REPLACE ('Test=FunctionA(varID, 1234,"", AB,"",""," last"); 测试=FunctionB(varID, 1234,"", AB,"","","last"); ','(,[^,]*,[^,]*,[^,]* );)$', ');') 作为双重输出你怎么能只针对“FunctionA”?
  • @Wakaboom 可能有一种方法可以改变我在REGEXP_REPLACE 中使用的模式,但老实说,我可能只是添加一个WHERE 子句来检查函数名称以确保安全。
  • 同意简单的 WHERE 子句就足够了,。到目前为止一切顺利,仍在使用您提供的正则表达式,但尚未在实际环境中解决。找到后会发布解决方案。
  • Will post a solution once I found it ...我已经找到了,至少根据您的问题。如果没有,那么应该编辑您的问题。
  • SELECT REGEXP_REPLACE ('Test=FunctionA(varID, 1234,"", AB,"","","last"); Test=FunctionB(varID, 1234,"", AB," ","","last"); Test=FunctionA(varID, 1234,"", AB,"","","last");', '([FunctionA](varID, 1234,"",[ ^,]AB,[^,]*,[^,]*,[^,]*);)', ');') 作为双重输出我得到以下错误...测试=功能); Test=FunctionB(varID, 1234,"", A.B,"","","last");测试=功能);如何通过修改上述脚本获得以下内容?.. Test=FunctionA(varID, 1234,"", A.B); Test=FunctionB(varID, 1234,"", A.B,"","","last"); Test=FunctionA(varID, 1234,"", A.B);
猜你喜欢
  • 1970-01-01
  • 2018-07-26
  • 2023-04-03
  • 2021-10-05
  • 2019-05-02
  • 2016-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多