设为首页 收藏本站
查看: 1202|回复: 0

[经验分享] Oracle数据库,忽略大小写Like模糊查询(SQL Server,MySql原理相同)

[复制链接]

尚未签到

发表于 2017-7-13 19:40:11 | 显示全部楼层 |阅读模式
背景
  在使用Oracle或者其它数据库时,使用like 关键字进行模糊查询是大家经常使用的功能,在纯中文环境中使用非常好用,还有一些通配符可以使用,但是在纯英文环境中,会出现大小需要精确匹配的问题,主要原因还是字符串的问题
  FL like '%{0}%' and
  这里like后是一个字符串,这样必然会有大小敏感的问题。比如如下的大小混编的字段
DSC0000.png


解决方案
  方案1
  使用Oracle系统函数对需要查询的列字符串进行小写转换(大写也行,变量相关部分都是大写转换),如下所示:
  select * from logo where lower(bsname) like '%cz%'
  当然这样还是不够的需要将代码中变量也转换成相应的小写
  String.Format(" select * from logo where lower(bsname) like '%{0}%'", tbfl.ToLower());
  该方案的优点:
  数据库兼容性好,sql server和mysql都可以按相应的原理来实现
  缺点:
  sql和代码中添加额外的函数代码,看起来不是这么干净
  方案2
  使用Oracle 正则表达式语法,完成大小写的模糊匹配 ,具体例子如下
  String.Format(" regexp_like(BSNAME,'[:graph:]*{0}[:graph:]*' ,'i') and", tbbs);
  看到这里可能有人会觉得写的太浅了,可能觉得“regexp_like”,“[:graph:]*”是什么鬼?
  其实以本人实用主义的观点出发完全已经够用了,达到实现like模糊查询的大小写匹配也就够了。
  查阅了相关资料,发现oracle的正则表达式竟然对应java的(和c#的命名有些区别),这里
  regexp_like是oracle正则匹配的函数
  [:graph:]*是匹配任意字符串(0或者n个字符)
  “i”参数是忽略字符串大小的意思
  具体如果想了解oracle 正则表达式的使用,参考资料我会附上一些外链。这里其实也是我想吐槽的地方,可能也是作为一个实用主义者的一些想法吧,当时我做这个需求的时候,baidu到基本是方案2,但是一些资料基本都是把oracle 正则表达式列出来解释一遍,其实我要的就是一个正则模拟like的功能而已,我想如果作为一个不是精通正则的新手,学习一大堆也未必能用的上,所以我才有把这篇文章分享出来想法,如果有需求就拿去用好了,如果真需要正则,那再深入学习。
  该方案的优点:
  使用简单,语句干净,考虑的地方少
  缺点:
  数据库不兼容(别的数据库可能函数不同,需要查阅资料)
写在最后
  这篇文章很短,但是是我的原创,也是工作中的一些小的经验,希望读者您是通过搜索引擎找到它的,也希望它能对你的工作有所帮助,同时这也是我真正意义的第一篇原创博文,我也尝试添加了打赏的功能,毕竟我还是屌丝,当然精神上的鼓励也是一样的,希望得到你们的鼓励。btw,希望它是有用的!
免责声明
  文章提供具体的思路和实现方式,但由于没有执行严格的代码测试,不保证执行100%正确,如果有问题也可以反馈给本人或者留言和本人讨论,共同提高,共同进步。
相关资料
  SQL Like 通配符
  oracle正则表达式regexp_like的用法详解

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-393567-1-1.html 上篇帖子: Sql Server中查询当天,最近三天,本周,本月,最近一个月,本季度的数据的sql语句 下篇帖子: SQL SERVER 9003错误解决方法 只适用于SQL2000
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表