SQL查询之字段是逗号分隔开的数组如何查询匹配数据问题

 更新时间:2023年03月06日 10:34:01   作者:江城撅嘴的川羌  
这篇文章主要介绍了SQL查询之字段是逗号分隔开的数组如何查询匹配数据问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

字段是逗号分隔开的数组如何查询匹配数据

方式一:CHARINDEX***()*****

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

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

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

方式二:WHERE LIKE

SELECT
    * 
FROM
    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,(^|,)表示数字前面必须是字符串开头或者是一个逗号,(,|$)表示数字后面必须是逗号或者字符串的结尾。这样就可以完整匹配逗号分隔的元素了。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 解决出现secure_file_priv null的问题

    解决出现secure_file_priv null的问题

    这篇文章主要介绍了解决出现secure_file_priv null的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • MySQL存储过程和函数的操作(十二)

    MySQL存储过程和函数的操作(十二)

    这篇文章主要为大家详细介绍了MySQL存储过程和函数的操作第十二篇,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • MySQL数据更新操作的两种办法(数据可视化工具和SQL语句)

    MySQL数据更新操作的两种办法(数据可视化工具和SQL语句)

    MySQL是最常用的数据库,在数据库操作中,基本都是增删改查操作,简称CRUD,下面这篇文章主要给大家介绍了关于MySQL数据更新操作的两种办法,需要的朋友可以参考下
    2023-03-03
  • Mac 下 MySQL5.7.22的安装过程

    Mac 下 MySQL5.7.22的安装过程

    这篇文章主要介绍了Mac 下 MySQL5.7.22的安装过程,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2018-05-05
  • MySQL自定义函数和存储过程示例详解

    MySQL自定义函数和存储过程示例详解

    这篇文章主要给大家介绍了关于MySQL自定义函数和存储过程的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用MySQL具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-04-04
  • 数据库管理中19个MySQL优化方法

    数据库管理中19个MySQL优化方法

    小编给大家总结了19条非常实用的MySQL数据库优化方法,这是每个服务器管理人员都必须知道的,一起学习下。
    2017-11-11
  • MySQL数据库MyISAM存储引擎转为Innodb的方法

    MySQL数据库MyISAM存储引擎转为Innodb的方法

    mysql数据库存储引擎为MyISAM的时候,在大访问量的情况下数据表有可能会出现被锁的情况,这就会导致用户连接网站时超时而返回502,此时就需要MySQL数据库MyISAM存储引擎转为Innodb,这篇文章主要介绍了MySQL数据库MyISAM存储引擎转为Innodb的方法,需要的朋友可以参考下
    2014-06-06
  • MySql中的Full Text Search全文索引优化

    MySql中的Full Text Search全文索引优化

    这篇文章主要为大家介绍了MySql中的Full Text Search全文索引优化示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • 浅谈MySQL数据库崩溃(crash)的常见原因和解决办法

    浅谈MySQL数据库崩溃(crash)的常见原因和解决办法

    本文主要介绍了浅谈MySQL数据库崩溃(crash)的常见原因和解决办法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • JDBC-idea导入mysql连接java的jar包(mac)的方法

    JDBC-idea导入mysql连接java的jar包(mac)的方法

    这篇文章主要介绍了JDBC-idea导入mysql连接java的jar包(mac)的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09

最新评论