java – 替换SQL查询中的表名,列名周围的转义字符
发布时间:2020-12-15 04:39:12 所属栏目:Java 来源:网络整理
导读:例如 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
例如
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,[column2] from [table1] 顺便说一句,如果您想知道在引用术语开始之前检查空格的重要性,请尝试从正则表达式中取出该要求.您将看到replaceAll()将错误地将结束报价作为术语的开头,而不是. Demo(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |