我有一个字符串
String SQL = "SELECT POSITION('Bengal' IN STRING) from delivery";
我想用这个字符串 INSTR(STRING,' Bengal')替换SQL字符串中的POSITION()函数。并且在SQL String的位置函数中,孟加拉语'和STRING不是一个固定的值,它会根据用户的要求而改变,但POSITION,开括号"(",IN和关闭括号")"是静态的。 使用正则表达式,最终输出必须看起来像这样。
String SQL ="SELECT INSTR(STRING,'Bengal') from delivery";
所以在字符串中,如果它重复两次,那么它必须用相应的参数将两次替换为相同的字符串SQL。 任何帮助将不胜感激。
答案 0 :(得分:2)
在Java中,使用此正则表达式:
SQL = SQL.replaceAll("POSITION\\((.*?) IN ([A-Z]+)\\)", "INSTR($2, $1)");
但是,请注意,它仅适用于输入String的简单情况,如果第一个参数是某个表达式,第二个参数更复杂,则可能无效。它甚至可以用于查询中的多个POSITION
表达式,例如:
String SQL = "SELECT POSITION('Bengal''s something IN d' IN STRING), POSITION('text' IN STRINGX) from delivery";
SQL = SQL.replaceAll("POSITION\\((.*?) IN ([A-Z]+)\\)", "INSTR($2, $1)");
// SQL now contains: "String SQL = "SELECT INSTR(STRING, 'Bengal''s something IN d'), INSTR(STRINGX, 'text') from delivery";"
如果要完全正确地替换函数调用,请使用正确的sqlparser。在过去,我使用了JSQLParser。它甚至可以使用嵌套POSITION
调用来处理POSITION
参数的子选择。