前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >sql模糊查询,字段多值模糊查询(字段分割搜索,字符串转行)

sql模糊查询,字段多值模糊查询(字段分割搜索,字符串转行)

作者头像
stys35
发布2020-12-09 14:22:45
5.8K0
发布2020-12-09 14:22:45
举报
文章被收录于专栏:工作笔记精华

对于平时简单的查询,一般使用like就能解决问题。如果字段值不连续,使用like就有点乏力了。

在工作中遇到这种业务,特整理如下文章,如果有更高效的解决方案,也望推荐互相学习。

1.表中数据如下:select * from MyTest

2.如果搜索表中 ”苹果" 数据,很简单就能搞定:select * from MyTest where name like '%苹果%'

3.简单小升级下,业务需要查找 “苹果,香蕉” 这种在数据库连续存放的数据,还是很简单:select * from MyTest where name like '%苹果,猕猴%'

4.现在业务大升级,需要查找 “苹果,猕猴” 这种不连续的数据,并且只要符合其中一个字段值,结果集就要包含其中。

对于这种查找,最直接想法:分割字符串,循环遍历去查询。这种方式性能不说,感觉就是一坨枯燥的东西。此业务首先源于数据库

设计如此,生成环境中”大量器件编号”通过逗号分隔存放在一个字段,前端参数顺序可变,所以产出此文章,也帮助遇到类似业务的朋友。

代码先呈现:之后做分析

+ View Code

结果如下:

总结:

  1.先把字符串转成XML格式,例如把“苹果,猕猴” 字符串装换成“<v>苹果</v><v>猕猴</v>”XML格式

    SELECT [value]=CONVERT(XML,'<v>'+REPLACE('苹果,猕猴',',','</v><v>')+'</v>')

  2.核心:考虑把XML字符串分割成多行,也就是字符串转行功能。 

   参考文章:http://topic.csdn.net/u/20091023/17/CF3F75D1-DE50-4EE1-B9BE-43E4AF3C62EF.html

declare @xmlStr xml set @xmlStr= CONVERT (XML, '<v>' + REPLACE ( '苹果,猕猴' , ',' , '</v><v>' )+ '</v>' ) SELECT N.v.value( '.' , 'varchar(100)' ) FROM @xmlStr.nodes( '/v' ) N ( v )

  3.OUTER APPLY函数的使用。

  参照文章:http://www.cnblogs.com/end/archive/2011/02/17/1957011.html

  4.原数据集inner join 字符串结果集,再查询inner join之后的结果集,筛选过结果。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档