背景

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

FL like '%{0}%' and

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

解决方案

方案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的用法详解

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

  1. sql 根据日期模糊查询&SQL Server dateTime类型 模糊查询

    曾经遇到这样的情况,在数据库的Meeting表中有PublishTime (DateTime,8)字段,用来存储一个开会时间,在存入时由于要指明开会具体时间,故格式为yyyy-mm-dd hh:mm: ...

  2. 数据库优化之锁表查询 (Sql Server)

    查询锁表语句 select request_session_id spid,DB_NAME(resource_database_id) databaseName, OBJECT_NAME(resour ...

  3. 数据库管理工具神器-DataGrip,可同时管理多个主流数据库[SQL Server,MySQL,Oracle等]连接

    前言 DataGrip:Jet Brains出品的一款数据库管理工具(没错,是Jet Brains出品,必属精品).DataGrip整合集成了当前主流数据库(如:SQL Server, MySQL, ...

  4. 查询Sql Server数据库对象结构

    查询Sql Server数据库对象结构 查询数据库 查询架构 查询表 查询列 查询存储过程 查询视图 1.查询某一服务器下所有数据库 select t.[name] as 数据库 from sys.d ...

  5. SQL Server,MySQL,Oracle三者的区别

    SQL Server,MySQL,Oracle三者的区别 2016-10-14 转自:SQL Server,MySQL,Oracle三者的区别 目录 1 Oracle.Sql Server.MySql ...

  6. sql server 与oracle数据互导的一种思路--sql server链接服务器

    思路:通过在sql server数据库中添加链接服务器,可以远程查询oracle数据库的表环境准备,安装sql server数据库,并安装好oracle驱动,在配置好tnsname文件中配置好orac ...

  7. 在oracle中通过链接服务器(dblink)访问sql server

    在oracle中通过链接服务器(dblink)访问sql server 2013-10-16 一.   工作环境: <1> Oracle数据库版本:Oracle 11g  运行环境 :IB ...

  8. [转]查询 SQL Server 系统目录常见问题

    查询 SQL Server 系统目录常见问题 http://msdn.microsoft.com/zh-cn/library/ms345522.aspx#_FAQ4 下列部分按类别列出常见问题. 数据 ...

  9. Java与SQL Server, MySql, Oracle, Access的连接方法以及一些异常解决

    Java与SQL Server, MySql, Oracle, Access的连接方法以及一些异常解决 I. 概述 1.1 JDBC概念 JDBC(Java Database Connectivity ...

随机推荐

  1. Internet History

    Alan Turing and Bletchley Park Top secret breaking effort(二战破译希特勒密码) 10,000 people at the peak(team ...

  2. 寒假学习计划——MOOC

    课程 西安交通大学[https://www.icourse163.org/course/XJTU-46006?tid=1002265006] 理由 本身中国大学mooc里c++课程不多,完结了能够有很 ...

  3. 【Redis】- 主从复制

    Redis跟MySQL一样,拥有非常强大的主从复制功能,而且还支持一个master可以拥有多个slave,而一个slave又可以拥有多个slave,从而形成强大的多级服务器集群架构. redis的主从 ...

  4. Linux和Windows文件路径

    linux系统下的文件夹路径和window下的不一样,windows下就需要写成“\\photos"因为java会把第一个"\"当成转义字符给“吃了”.但在linux下就 ...

  5. svmtrain输入参数介绍【转】

    -s svm类型:SVM设置类型(默认0) 0 -- C-SVC 1 --v-SVC 2 – 一类SVM 3 -- e -SVR 4 -- v-SVR -t 核函数类型:核函数设置类型(默认2) 0 ...

  6. thinkPHP框架单一入口文件解析

    一.index.php  (可参考ThinkPHP学习手册http://document.thinkphp.cn/manual_3_2.html#entrance_file) index.php单入口 ...

  7. python json 序列化

    如果我们要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,比如XML,但更好的方法是序列化为JSON,因为JSON表示出来就是一个字符串,可以被所有语言读取,也可以方便地存储到磁盘或者通过 ...

  8. android异常Unable to instantiate activity ComponentInfo解决方法

    我是下面提到的第四条: 在Order and Export 中 把新加的 android-support-v4.jar的前面的对号打上勾 保存:就可以了: 做android开发的可能都碰到" ...

  9. BZOJ4299 Codechef FRBSUM(主席树)

    感觉非常不可做,于是考虑有什么奇怪的性质. 先考虑怎么求子集和mex.将数从小到大排序,假设已经凑出了0~n的所有数,如果下一个数>n+1显然mex就是n+1了,否则若其为x则可以凑出1~n+x ...

  10. BZOJ2049:[SDOI2008]洞穴勘测——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=2049 https://www.luogu.org/problemnew/show/P2147 辉辉热 ...