SQL查询之字段是逗号分隔开的数组怎么查询匹配数据

61次阅读
没有评论

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

这篇文章主要介绍“SQL 查询之字段是逗号分隔开的数组怎么查询匹配数据”,在日常操作中,相信很多人在 SQL 查询之字段是逗号分隔开的数组怎么查询匹配数据问题上存在疑惑,丸趣 TV 小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”SQL 查询之字段是逗号分隔开的数组怎么查询匹配数据”的疑惑有所帮助!接下来,请跟着丸趣 TV 小编一起来学习吧!

字段是逗号分隔开的数组如何查询匹配数据方式一:CHARINDEX***()*****

SELECT
 * 
 U_PUR1 
WHERE
 CHARINDEX(  ,  +  100306  +  , ,  ,  + DeptCode +  ,  )  0

匹配字符串开始位置的函数 CHARINDEX(str1,str,[start])

CHARINDEX(str1,str,[start]) 函数返回子字符串 str1 在字符串 str 中的开始位置,start 为搜索的开始位置,如果指定 start 参数,则从指定位置开始搜索;如果不指定 start 参数或者指定为 0 或者负值,则从字符串开始位置搜索。

方式二:WHERE LIKE

SELECT
 * 
 U_PUR1 
WHERE
  ,  + DeptCode +  ,  LIKE  %,  +  100306  +  ,%

Where Like 的方式显然更好理解一些,首先在字段收尾加上逗号,这样可以使得字段中每一个值都拥有完整的格式,再使用 Like 进行模糊匹配时,可以使首尾的值都能匹配到。

Mysql 逗号分隔的字段查询

在工作中,经常会遇到一对多的关系,比如用户和爱好。想要在 mysql 中保存这种关系,一般有两种方式,一种是建立一张用户爱好表 user_hobby(user_id, hobby_id),这样一条 user_id 就会存在多条记录。

或者采用第二种方式,直接在用户表中增加 hobby_ids 字段,将 hobby_id 拼接成用逗号分隔的字符串保存起来。

那么问题来了,如果采用第二种方式的话,查询的时候要如何处理呢?下面介绍几种常见的处理方式。

1.like

可能最新想到的是采用 like 的形式,如下:

select * from user where hobby_ids like  %1%

这种方式是否可行呢?行,但是有适用范围,如果 hobby_id 在 10 以内,那么这么处理完全是可以的,但是一旦超过了 10,那 %1% 就会把 10,11, 这些带 1 的 id 全都匹配处理。

2.find_in_set

为了解决 like 存在的问题,还可以使用 mysql 提供的 find_in_set(str, strlist),sql 可以这样写:

select * from user where find_in_set(1 , hobby_ids);

这样 mysql 就会把 hobby_ids 的值,按照逗号分隔的一个个元素去匹配。如果我们要匹配多个值要怎么办呢,比如查找喜欢 1 - 篮球或 2 - 足球的用户,可以

select * from user where find_in_set(1 , hobby_ids) or find_in_set(2 , hobby_ids);

如果匹配的值较多,我们可能要拼很长的 sql,那有没有稍微简短的方式呢,我们可以采用下面的方式。

3.regexp

regexp 是 mysql 提供的强大的正则匹配方式。上面的 sql 就可以改写成:

select * from user where hobby_ids regexp  (^|,)(1|2)(,|$)

这里是完全采用字符串正则匹配的方式,(1|2) 表示匹配 1 或者 2,(^|,) 表示数字前面必须是字符串开头或者是一个逗号,(,|$) 表示数字后面必须是逗号或者字符串的结尾。这样就可以完整匹配逗号分隔的元素了。

到此,关于“SQL 查询之字段是逗号分隔开的数组怎么查询匹配数据”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注丸趣 TV 网站,丸趣 TV 小编会继续努力为大家带来更多实用的文章!

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