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

前端之家收集整理的这篇文章主要介绍了Oracle数据库,忽略大小写Like模糊查询(SQL Server,MySql原理相同)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

背景

在使用Oracle或者其它数据库时,使用like 关键字进行模糊查询是大家经常使用的功能,在纯中文环境中使用非常好用,还有一些通配符可以使用,但是在纯英文环境中,会出现大小需要精确匹配的问题,主要原因还是字符串的问题@H_301_4@

FL like ‘%{0}%’ and@H_301_4@

这里like后是一个字符串,这样必然会有大小敏感的问题。比如如下的大小混编的字段@H_301_4@

@H_301_4@

解决方

方案1@H_301_4@

使用Oracle系统函数对需要查询的列字符串进行小写转换(大写也行,变量相关部分都是大写转换),如下所示:@H_301_4@

select * from logo where lower(bsname) like ‘%cz%’@H_301_4@

当然这样还是不够的需要将代码中变量也转换成相应的小写@H_301_4@

String.Format(” select * from logo where lower(bsname) like ‘%{0}%’”,tbfl.ToLower());@H_301_4@

该方案的优点:@H_301_4@

数据库兼容性好,sql server和MysqL都可以按相应的原理来实现@H_301_4@

缺点:@H_301_4@

sql代码添加额外的函数代码,看起来不是这么干净@H_301_4@

方案2@H_301_4@

使用Oracle 正则表达式语法,完成大小写的模糊匹配 ,具体例子如下@H_301_4@

String.Format(” regexp_like(BSNAME,’[:graph:]*{0}[:graph:]*’,’i’) and”,tbbs);@H_301_4@

看到这里可能有人会觉得写的太浅了,可能觉得“regexp_like”,“[:graph:]*”是什么鬼?@H_301_4@

其实以本人实用主义的观点出发完全已经够用了,达到实现like模糊查询的大小写匹配也就够了。@H_301_4@

查阅了相关资料,发现oracle的正则表达式竟然对应java的(和c#的命名有些区别),这里@H_301_4@

regexp_like是oracle正则匹配的函数@H_301_4@

[:graph:]*是匹配任意字符串(0或者n个字符)@H_301_4@

“i”参数是忽略字符串大小的意思@H_301_4@

具体如果想了解oracle 正则表达式的使用,参考资料我会附上一些外链。这里其实也是我想吐槽的地方,可能也是作为一个实用主义者的一些想法吧,当时我做这个需求的时候,baidu到基本是方案2,但是一些资料基本都是把oracle 正则表达式列出来解释一遍,其实我要的就是一个正则模拟like的功能而已,我想如果作为一个不是精通正则的新手,学习一大堆也未必能用的上,所以我才有把这篇文章分享出来想法,如果有需求就拿去用好了,如果真需要正则,那再深入学习。@H_301_4@

该方案的优点:@H_301_4@

使用简单,语句干净,考虑的地方少@H_301_4@

缺点:@H_301_4@

数据库不兼容(别的数据库可能函数不同,需要查阅资料)@H_301_4@

写在最后

这篇文章很短,但是是我的原创,也是工作中的一些小的经验,希望读者您是通过搜索引擎找到它的,也希望它能对你的工作有所帮助,同时这也是我真正意义的第一篇原创博文,我也尝试添加了打赏的功能,毕竟我还是屌丝,当然精神上的鼓励也是一样的,希望得到你们的鼓励。btw,希望它是有用的!@H_301_4@

免责声明

文章提供具体的思路和实现方式,但由于没有执行严格的代码测试,不保证执行100%正确,如果有问题也可以反馈给本人或者留言和本人讨论,共同提高,共同进步。@H_301_4@

相关资料

SQL Like 通配符@H_301_4@

oracle正则表达式regexp_like的用法详解@H_301_4@

打赏链接@H_301_4@

原文链接:https://www.f2er.com/oracle/213313.html

猜你在找的Oracle相关文章