mysql语句被包含_SQL查询字段被包含语句
前⾔
说到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登场
sql语句查询不包含这时候,我们就可以⽤ 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
0 ]]>
如果后期我们想要加⼊⼀个新的⼈,⽐如⽑利⼩五郎,只需要在传⼊的参数中加⼊ ‘⼩兰灰原柯南⽑利⼩五郎' 就可以了,是不是简单了许多呢?
以上所述是⼩编给⼤家介绍的SQL字段的被包含查询语句,希望对⼤家有所帮助,如果⼤家有任何疑问欢迎给我留⾔,⼩编会及时回复⼤家的!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论