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

背景

在使用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的用法详解

时间: 2024-10-24 05:10:12

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

Oracle EBS-SQL (SYS-1): sysadmin_用户职责查询.sql

select fu.user_name 用户名, fu.description 用户说明, frv.RESPONSIBILITY_NAME 职责名称, REQUEST_GROUP_NAME 报表组, (select  ppf.FULL_NAME from apps.per_people_f  ppf where fu.employee_id = ppf.PERSON_ID and trunc(sysdate)  between  trunc(ppf.EFFECTIVE_START_DATE) a

Oracle EBS-SQL (SYS-2): sys_在线用户查询.sql

SELECT fs.USER_NAME,       fu.description,       fs.RESPONSIBILITY_NAME,       fs.USER_FORM_NAME,       fs.TIME,       fs.RESP_APPL_ID,       fs.RESPONSIBILITY_ID,       fs.FORM_ID,       fs.FORM_APPL_ID  FROM FND_SIGNON_AUDIT_VIEW fs,       fnd_user

Oracle EBS-SQL (SYS-7):表单个性化查询.sql

animation-timing-function animation-timing-function 规定动画的速度曲线.速度曲线定义动画从一套 CSS 样式变为另一套所用的时间.在平常的取值中,主要有以下几个: 值 描述 linear 动画从头到尾的速度是相同的. ease 默认.动画以低速开始,然后加快,在结束前变慢. ease-in 动画以低速开始. ease-out 动画以低速结束. ease-in-out 动画以低速开始和结束. cubic-bezier(n,n,n,n) 在 cub

查询SQL server 数据库连接数 并且断开连接

一个生产环境,一个线上的环境,在线上环境出现的数据问题在生产环境中没有出现,因此需要将线上的数据库还原到生产环境,但是每次还原的时候总是出现 辞数据库正在使用,无法还原,但是肉眼是看不到,所以需要查询出来数据库连接并且强制断开. 1.查询 SQL server 允许同时连接的用户的最大数 SELECT @@MAX_CONNECTIONS 2.查询指定数据库的当前连接信息 SELECT * FROM master.dbo.sysprocesses WHERE dbid IN ( SELECT db

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

思路:通过在sql server数据库中添加链接服务器,可以远程查询oracle数据库的表环境准备,安装sql server数据库,并安装好oracle驱动,在配置好tnsname文件中配置好oracle连接,本人用的sql server2008 R2,oracle11g测试,提供程序采用的OraOLEDB.Oracle(网上很多文章说这个不能成功,要选择Microsoft OLE DB Privider for oracle,可我选择这个配置成功,估计是不能同时存在两个,如果有两个,sql s

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

查询 SQL Server 系统目录常见问题 http://msdn.microsoft.com/zh-cn/library/ms345522.aspx#_FAQ4 下列部分按类别列出常见问题. 数据类型 如何找到指定表中列的数据类型? 如何找到指定表中的 LOB 数据类型? 如何找到依赖于指定数据类型的列? 如何找到依赖于指定 CLR 用户定义类型或别名数据类型的计算列? 如何找到依赖于指定 CLR 用户定义类型或别名类型的参数? 如何找到依赖于指定 CLR 用户定义类型的 CHECK 约束?

用户、组或角色 'zgb' 在当前数据库中已存在。 (Microsoft SQL Server,错误: 15023)

在使用SQL Server 时,我们经常会遇到一个情况:需要把一台服务器上的数据库转移到另外一台服务器上.而转移完成后,需要给一个"登录"关联一个"用户"时,往往会发生错误: "错误15023:当前数据库中已存在用户或角色" 这个问题非常棘手,几经排常找到了原因与解决方法,因为这个问题与解决方法均比较复杂,所以把这个过程中的一些经验纪录下来与大家分享,希望能对大家以后的类似操作有所帮助. 原因及解决办法如下: 首先介绍一下sql server中&

(在数据库中调用webservices。)SQL Server 阻止了对组件 'Ole Automation Procedures' 的 过程'sys.sp_OACreate' 的访问

--开启 Ole Automation Procedures sp_configure 'show advanced options', 1; GO RECONFIGURE; GO sp_configure 'Ole Automation Procedures', 1; GO RECONFIGURE; GO EXEC sp_configure 'Ole Automation Procedures'; GO --关闭 Ole Automation Procedures sp_configure '

mysql数据库数据能不能导入到sql server中

当然可以了. 一.为 MySQL安装ODBC驱动 下载MySQL ODBC Connector,下载:http://dev.mysql.com/downloads/connector 从控制面板-管理工具,打开你的 数据源(ODBC),选 系统DNS ,点添加.   在 创建新数据源对话框中,选择MySQL ODBC 5.1 Driver ,点完成. 完成后会出现MySQL 链接对话框,添加你的 MySQL 数据库账号信息,并确认"root"账号是否有全部的权限,如果你安装MySQL