SQL的模糊查询怎么实现

102次阅读
没有评论

共计 1256 个字符,预计需要花费 4 分钟才能阅读完成。

本篇内容介绍了“SQL 的模糊查询怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让丸趣 TV 小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

前言

说到 SQL 的模糊查询,最先想到的,应该就是 like 关键字。

当我们需要查询包含某个特定字段的数据时,往往会使用‘% 关键字 % 查询的方式。例如:

SELECT ... FROM  表名  WHERE  字段名  LIKE  % 关键字 %

这应该可以算是一种典型的”包含 XXX”的方式,但如果我们需要查询字段被包含于特定字符的数据时呢?

比如,我有一张联系人数据表 ConnectName,其中有个字段用于记录姓名 name。我想获取名为小兰和灰原的人的联系资料。正常情况下,我们首先能想到的做法应该是:

SELECT * FROM ConnectName WHERE name =  小兰  OR name =  灰原 

这样的做法是可以实现这种目的的。如果这时候,我突然想,再查一个人,比如说“柯南”,那么我们就要修改 SQL 的结构,添加一个 Where 条件句:

SELECT * FROM ConnectName WHERE name =  小兰  OR name =  灰原  OR name =  柯南 

我们知道,OR 条件查询本身是属于效率较低的,而且结构变动的语句在 MyBatis 实现稍微麻烦些(当然也是可以实现的,遍历插入字段就行了)。

能不能简单一些呢?我可以把所有关键字放在一起,只用一个 Where 条件去实现吗?

CHARINDEX 登场

这时候,我们就可以用 CHARINDEX 关键字了,CHARINDEX 可以返回某个字段在一串文字中出现的位置,跟 String 的 indexOf 用法类似,不多废话,我们来举个栗子:

CHARINDEX(李白 , 曹操很帅) =0

在上面的栗子中,因为曹操很帅不包含李白关键字,所以找不到,返回 0.

CHARINDEX(李白 , 李白很帅) =1

同样的栗子,因为包含里李白关键字,会返回关键字所在的开头第一个字的索引,所以返回 1.

了解了使用方法之后,我们就可以运用 CHARINDEX 关键字优化下我们的 SQL 语句:

SELECT * FROM ConnectName WHERE CHARINDEX(name , 小兰灰原柯南) 0

如果 name 字段对应的名字在‘小兰灰原柯南 中出现,那么 CHARINDEX 函数就会返回大于 1,就可以得到我们想要的数据啦(他们 3 个人也可以在一起愉快的玩耍咯 ^-^)

对应的 mybatis 实现也相对简洁

SELECT * FROM ConnectName WHERE  !--[CDATA[ AND CHARINDEX(name ,#{ 传入的参数}) --  0 ]]

如果后期我们想要加入一个新的人,比如毛利小五郎,只需要在传入的参数中加入‘小兰灰原柯南毛利小五郎 就可以了。

“SQL 的模糊查询怎么实现”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注丸趣 TV 网站,丸趣 TV 小编将为大家输出更多高质量的实用文章!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-15发表,共计1256字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)