例如
query = " select "2017-06-08" as new_colum, "true" as my_flag, "column1", "column2" from "table1" "
上述查询应更改为:
选择“2017-06-08”作为new_column,将“true”选为[table1]中的my_flag,[column1],[column2]. (MS SQL格式)
我可以使用像jsql解析器这样的解析器吗?或者还有其他更好的方法吗?
如果不是因为你的日期被双引号括起来,我们可以使用String#replaceAll()用[$1]完成“(.*?)”的全面替换.但双引号日期的存在使问题更加困难.我更新的答案使用以下模式仅针对双引号中的非日期:(\s+)"([^\d].*?)"
这只会匹配一个前面带有至少一个空格字符的引用术语,并且其引号内的第一个字符不是数字.这应排除所有日期,并且不应排除任何列,因为SQL Server列名称不能以数字开头.
我在这里假设每个引用的列前面都有空格.这应该没问题,假设查询字符串中的第一个单词始终是SELECT或UPDATE之类的关键字.
String query = "select \"2017-06-08\" as new_colum, \"column1\", \"column2\" from \"table1\"";
query = query.replaceAll("(\\s+)\"([^\\d].*?)\"", "$1[$2]");
System.out.println(query);
输出:
select "2017-06-08" as new_colum, [column1], [column2] from [table1]
顺便说一句,如果您想知道在引用术语开始之前检查空格的重要性,请尝试从正则表达式中取出该要求.您将看到replaceAll()将错误地将结束报价作为术语的开头,而不是.
Demo
查看更多关于Java 替换SQL查询中的表名,列名周围的转义字符的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did69403