Access开发培训
网站公告
·Access专家课堂QQ群号:151711184    ·Access快速开发平台下载地址及教程    ·欢迎加入Access专家课堂微信群!    ·如何快速搜索本站文章|示例|资料    
您的位置: 首页 > 技术文章 > ADP及SQL SERVER

SQL模糊查询通配符_和%处理

时 间:2018-08-29 08:28:34
作 者:宏鹏   ID:21115  城市:上海
摘 要:SQL模糊查询通配符_和%处理 
正 文:

下划线和百分号在sql模糊查询like语句中为特殊字符,分别可匹配1个字符和0到多个字符,如果需要真正查询特殊字符得转义,如like 'a\_b%' escape '\',将匹配前3个字符为a_b的所有记录。

1、PreparedStatement处理

普遍做法,拼sql时使用like ?,左模糊在查询条件字符串左侧添加%,右模糊在查询条件字符串右侧添加%,对特殊字符进行预先转义

condition = condition.replaceAll("_", "\\\\_");

condition = condition.replaceAll("%", "\\\\%");

ps.setString(idx, "%" + conditon + "%")

为什么replaceAll中需要使用4个\可参考jdk源码Matcher.appendReplacement方法。

专业做法,拼sql时使用like ? escape '\'(java中使用两个\\)

2、多数据库支持处理

在postgres中escape需要使用'\\'(java中使用四个\\)处理

3、其他思考

查找数据库是否有配置模糊查询的默认转义字符,搜索未果,可能关键字抽取有问题,试图在oracle的v$parameter中查找会话相关参数但是没有收获。


建议处理方式:在sql中like后添加escape,但是不对原始输入条件进行转换,用户可在查询条件中使用转义字符查询特殊字符也可以进行中间模糊查询,如输入'a%b','a\%b'。



Access软件网QQ交流群 (群号:54525238)       Access源码网店

常见问答:

技术分类:

相关资源:

专栏作家

关于我们 | 服务条款 | 在线投稿 | 友情链接 | 网站统计 | 网站帮助