1

我有一个以文本形式传递给我的 SQL 查询,这是其中的一部分:

WHERE (t.STIME > CAST(SYSTIMESTAMP AS TIMESTAMP) + NUMTODSINTERVAL(-86400000 * 0.001, 'SECOND')) ) t ORDER BY

m_2 ASC,m_1 ASC,t.STIME ASC

我想做的就是以我将拥有的方式简单地修改它:

WHERE (t.STIME > CAST(SYSTIMESTAMP AS TIMESTAMP) + NUMTODSINTERVAL(-86400000 * 0.001, 'SECOND')) ORDER BY

m_2 ASC,m_1 ASC,t.STIME ASC)

所以,我需要以某种方式从字符串中删除:“)t”,但该怎么做呢?我总是收到 "unmatched ')' 括号,我真的不知道为什么 x/

这是我为替换此字符串而编写的方法:

 public static String replaceLast(String string, String toReplace, String replaceWith) {
        int last = string.lastIndexOf(toReplace);
        if (last < 0) return string;
        String ending = string.substring(last).replaceFirst(toReplace, replaceWith);
        return string.substring(0, last) + tail;
   }

然后我尝试以这种方式使用它:

 if(sqlToTrim.lastIndexOf("\\) t") > 0){
                replaceLast(sqlToTrim, "\\) t ", " ");
                addLastParanthesis(sqlToTrim);
            }

但它没有被替换,基本上没有任何变化 - replaceLast 从未使用过。我假设我搞砸了正则表达式,我搜索了堆栈溢出,但似乎 \ 是我应该放在前面的正确组合)。在此先感谢您的帮助。谁能告诉我我做错了什么?

如果您需要知道,我为什么要这样做,为什么以这种方式 - 遗留代码......

4

1 回答 1

5

字符串是不可变的。replaceLast(sqlToTrim, "\\) t ", " ");返回一个新字符串。做:

sqlToTrim = replaceLast(sqlToTrim, "\\) t ", " ");

并从那里继续。如果addLastParenthesis修改了它应该返回的字符串,即

sqlToTrim = replaceLast(sqlToTrim, "\\) t ", " ");
sqlToTrim = addLastparenthesis(sqlToTrim);
于 2013-10-14T18:17:18.740 回答