【发布时间】:2026-02-04 21:00:02
【问题描述】:
我有一个字符串
String SQL="SELECT * FROM EMP(SELECT USERNAME FROM EMP WHERE EMPID=100 AND NULLIF(EXP1,EXP2) AND NVL(EXP1,EXP2) AND NVL(EXP3,EXP4)";
在上面的字符串中我有 NVL(EXP1,EXP2),我想用这个字符串表达式替换这个字符串
CASE WHEN EXP1 IS NULL THEN EXP2 WHEN EXP1== 0 THEN EXP2其中 EXP1 和 EXP2 是 NVL(EXP1,EXP2) 的参数,这个参数我想进入替换字符串表达式。
我正在使用这个 RegExp 来替换它
这是代码
String SQL="SELECT * FROM EMP(SELECT USERNAME FROM EMP WHERE EMPID=100 AND NULLIF(EXP1,EXP2) AND NVL(EXP1,EXP2) AND NVL(EXP3,EXP4)";
String Pattern = "(?i)nvl\\(([^\\,)]+),([^\\),]+)\\)";
String replacement = "CASE WHEN Temp1 IS NULL THEN Temp2 WHEN Temp1 == 0 THEN Temp2";
SQL = SQL.replaceAll(Pattern, replacement);
System.out.println(SQL);
但是替换字符串的 Temp1 和 Temp2 我想用 NVL(EXP1,EXP2) 的 EXP1 和 EXP2 替换,因为会有许多具有不同参数的 NVL() 函数。
我当前的输出是:
SELECT * FROM EMP(SELECT USERNAME FROM EMP WHERE EMPID=100 AND NULLIF(EXP1,EXP2) AND CASE WHEN Temp1 IS NULL THEN Temp2 WHEN Temp1 == 0
THEN Temp2 AND CASE WHEN Temp1 IS NULL THEN Temp2 WHEN Temp1 == 0 THEN Temp2
我的预期输出:
SELECT * FROM EMP(SELECT USERNAME FROM EMP WHERE EMPID=100 AND NULLIF(EXP1,EXP2) AND CASE WHEN EXP1 IS NULL THEN EXP2 WHEN EXP1 == 0
THEN EXP2 AND CASE WHEN EXP3 IS NULL THEN EXP4 WHEN EXP3 == 0 THEN EXP4;
请帮我解决这个问题。我卡在这里了。
【问题讨论】:
-
-
@sidgate: 如何用当前字符串参数替换替换字符串,能否请您提供一些代码示例。