Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >sql模糊查询,字段多值模糊查询(字段分割搜索,字符串转行)

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

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

对于平时简单的查询,一般使用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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MySql字符串拆分实现split功能(字段分割转列、转行)
需求描述 实现的sql 案例演示 字符串拆分: SUBSTRING_INDEX(str, delim, count) 替换函数:replace( str, from_str, to_str) 获取字符串长度:LENGTH( str ) 实现的原理解析 实现sql 正式的原理解析 Step1:首先获取最后需被拆分成多少个字符串,利用 help_topic_id 来模拟遍历 第n个字符串。 Step2:根据“,”逗号来拆分字符串,此处利用 SUBSTRING_INDEX(str, delim, count) 函数,最后把结果赋值给 num 字段。 扩展:判断外部值是否在 num列值中 find_in_set instr 字符串转多列
鱼找水需要时间
2023/02/16
16.9K1
MySql字符串拆分实现split功能(字段分割转列、转行)
oracle数据库的拼接字符串,Oracle数据库拼接字符串
Ora-03113&bsol;Ora-03114与Oracle In 拼接字符串的问题
全栈程序员站长
2022/11/08
9360
C++ 字符串分割
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
恋喵大鲤鱼
2019/10/22
4.5K0
php入门之字符串的操作
addcslashes — 以 C 语言风格使用反斜线转义字符串中的字符 addslashes — 使用反斜线引用字符串 bin2hex — 函数把ASCII字符的字符串转换为十六进制值 chop — rtrim 的别名 chr — 返回指定的字符 chunk_split — 将字符串分割成小块 convert_cyr_string — 将字符由一种 Cyrillic 字符转换成另一种 convert_uudecode — 解码一个 uuencode 编码的字符串 convert_uuencode — 使用 uuencode 编码一个字符串 count_chars — 返回字符串所用字符的信息 crc32 — 计算一个字符串的 crc32 多项式 crypt — 单向字符串散列 echo — 输出一个或多个字符串 explode — 使用一个字符串分割另一个字符串 fprintf — 将格式化后的字符串写入到流 get_html_translation_table — 返回使用 htmlspecialchars 和 htmlentities 后的转换表 hebrev — 将逻辑顺序希伯来文(logical-Hebrew)转换为视觉顺序希伯来文(visual-Hebrew) hebrevc — 将逻辑顺序希伯来文(logical-Hebrew)转换为视觉顺序希伯来文(visual-Hebrew),并且转换换行符 hex2bin — 转换十六进制字符串为二进制字符串 html_entity_decode — Convert all HTML entities to their applicable characters htmlentities — Convert all applicable characters to HTML entities htmlspecialchars_decode — 将特殊的 HTML 实体转换回普通字符 htmlspecialchars — Convert special characters to HTML entities implode — 将一个一维数组的值转化为字符串 join — 别名 implode lcfirst — 使一个字符串的第一个字符小写 levenshtein — 计算两个字符串之间的编辑距离 localeconv — Get numeric formatting information ltrim — 删除字符串开头的空白字符(或其他字符) md5_file — 计算指定文件的 MD5 散列值 md5 — 计算字符串的 MD5 散列值 metaphone — Calculate the metaphone key of a string money_format — Formats a number as a currency string nl_langinfo — Query language and locale information nl2br — 在字符串所有新行之前插入 HTML 换行标记 number_format — 以千位分隔符方式格式化一个数字 ord — 返回字符的 ASCII 码值 parse_str — 将字符串解析成多个变量 print — 输出字符串 printf — 输出格式化字符串 quoted_printable_decode — 将 quoted-printable 字符串转换为 8-bit 字符串 quoted_printable_encode — 将 8-bit 字符串转换成 quoted-printable 字符串 quotemeta — 转义元字符集 rtrim — 删除字符串末端的空白字符(或者其他字符) setlocale — 设置地区信息 sha1_file — 计算文件的 sha1 散列值 sha1 — 计算字符串的 sha1 散列值 similar_text — 计算两个字符串的相似度 soundex — Calculate the soundex key of a string sprintf — Return a formatted string sscanf — 根据指定格式解析输入的字符 str_getcsv — 解析 CSV 字符串为一个数组 str_ireplace — str_replace 的忽略大小写版本 str_pad — 使用另一个字符串填充字符串为指定长度 str_repeat — 重复一个字符串 str_replace — 子字符串替换 str_rot13 — 对字符串执行 ROT13 转换 str_shuffle — 随机打乱一个字符串 str_split —
kl博主
2023/11/17
2030
C++实现字符串的分割和替换
代码主要说明: (1)tmp.find(target):查找子串第一次出现的下标; (2)string::npos:表示未查找到子串时返回的数值。MSDN中规定,其值定义如下:static const size_type npos = -1;,转换为无符号整型unsignned int表示的是string所能容纳的最大字符数。 (3)string::size_type (由字符串配置器 allocator 定义) 描述的是 string的size,故需为无符号整数型别。因为字符串配置器缺省以类型size_t 作为 size_type。
恋喵大鲤鱼
2019/02/22
2.9K0
python 字符串
life is short,you need python. LIFE IS SHORT,YOU NEED PYTHON. lIFE IS SHORT,YOU NEED PYTHON. Life Is Short,You Need Python. Life is short,you need python.
用户7886150
2021/01/14
3460
C++之split字符串分割
函数原型:char * strtok (char *str, char * delim);
全栈程序员站长
2022/08/13
6.1K0
C++之split字符串分割
《看漫画学python》第七天-字符串&函数
若我们想将多个数据打包并且统一管理,应该怎么办?Python内置的数据类型如序列(列表、元组等)、集合和字典等可以容纳多项数据,我们称它们为容器类型的数据。
用户10002156
2023/08/07
2210
《看漫画学python》第七天-字符串&函数
C++实现字符串的分割和替换
代码主要说明: (1)tmp.find(target):查找子串第一次出现的下标; (2)string::npos:表示未查找到子串时返回的数值。MSDN中规定,其值定义如下:static const size_type npos = -1;,转换为无符号整型unsignned int表示的是string所能容纳的最大字符数。 (3)string::size_type (由字符串配置器 allocator 定义) 描述的是 string的size,故需为无符号整数型别。因为字符串配置器缺省以类型size_t 作为 size_type。
恋喵大鲤鱼
2018/08/03
9530
php字符串操作函数大全
addcslashes — 为字符串里面的部分字符添加反斜线转义字符 addslashes — 用指定的方式对字符串里面的字符进行转义 bin2hex — 将二进制数据转换成十六进制表示 chop — rtrim() 的别名函数 chr — 返回一个字符的ASCII码 chunk_split — 按一定的字符长度将字符串分割成小块 convert_cyr_string — 将斯拉夫语字符转换为别的字符 convert_uudecode — 解密一个字符串 convert_uuencode — 加密一个字符串
仙士可
2019/12/18
9670
Python字符串
(2)取字符串中的字符,如果从前往后取,第一个字符下标为0,逐一加一;如果从后往前取,最后一个下标是-1,往前逐一减一;
小雨coding
2020/07/09
9640
Python字符串
Java中字符串对象的大闸蟹
字符串比较 equals(Object anObject) equals(Object anObject) 将此字符串与指定对象进行比较。 返回类型:boolean //创建字符串 String str1 = "Java"; String bytet = "java"; //输出比较结果 System.out.println(str1.equals(bytet)); System.out.println(str1 == bytet); e
用户9006224
2022/12/21
6200
Java中字符串对象的大闸蟹
DM达梦数据库字符串函数整理
在数据处理中,字符串函数是进行文本数据清洗、格式化和分析的重要工具。达梦数据库提供了丰富的字符串函数,涵盖了字符串的检索、替换、格式化等多个方面,极大地便利了数据库管理员和开发人员的工作。本文将详细介绍达梦数据库中常用的字符串函数,并通过具体的SQL示例来解析它们的用法。
用户11147438
2024/07/02
3.2K0
字符串分割性能对比
对于开发人员来说,字符串分割很常见。那么我们就来掰一下他的由来和应用场景,在前后端交互场景中,用户批量操作,
叔牙
2020/11/19
1.1K0
字符串分割性能对比
Java字符串操作
字符串函数 replace() 函数来替换单个字符。replaceFirst() 替换第一个的regex匹配项,replaceAll()替换所有的regex匹配项, String的replaceAll跟replaceFirst使用了正则表达式!
李玺
2021/11/22
7600
Java字符串操作
探索 MySQL 中的字符串分割技巧与窍门
在MySQL中,字符串分割是一个常见的操作,用于将一个包含多个子字符串的大字符串拆分成多个部分。以下是几种常见的在MySQL中进行字符串分割的方法:
修己xj
2023/08/25
3.6K0
探索 MySQL 中的字符串分割技巧与窍门
C语言 字符串分割
一、简述 记–字符串分割,strtok()函数的使用例子、自己简单实现split()函数。
全栈程序员站长
2022/06/27
7K0
C语言 字符串分割
Python字符串操作之字符串分割与组合
12.1 str.split():字符串分割函数 通过指定分隔符对字符串进行切片,并返回分割后的字符串列表。 语法:
狼啸风云
2019/06/13
4.2K0
Java字符串操作编程
本文为joshua317原创文章,转载请注明:转载自joshua317博客 https://www.joshua317.com/article/225
joshua317
2022/03/25
2310
Python 基础(字符串)
字符串定义 字符串是 Python中最常用的数据类型。字符串的意思就是"一串字符",比如"Hello,Charlie"是一个字符串,"How are you?"也是一个字符串。 Python要求字符串
数据STUDIO
2021/06/24
7290
相关推荐
MySql字符串拆分实现split功能(字段分割转列、转行)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档