加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读