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

作者:江城撅嘴的川羌 时间:2024-01-21 22:32:08 

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

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

来源:https://blog.csdn.net/m0_63969219/article/details/125903234

标签:SQL查询,逗号分隔,匹配数据
0
投稿

猜你喜欢

  • 使用eval()解析JSON格式字符串应注意的问题

    2008-04-16 15:46:00
  • 使用Python的音乐播放器GUI的实现

    2022-03-02 05:02:45
  • Vue提供的三种调试方式你知道吗

    2024-05-29 22:44:57
  • pytest多重断言的实现

    2021-10-12 03:30:25
  • 深入探索数据库MySQL性能优化与复杂查询相关操作

    2024-01-26 20:25:11
  • Python模拟登录12306的方法

    2023-03-11 09:12:36
  • 编程活动中几个不良现象

    2008-09-01 12:23:00
  • vue-cli npm如何解决vue项目中缺失core-js的问题

    2024-04-28 09:30:26
  • MySQL query_cache_type 参数与使用详解

    2024-01-29 08:02:58
  • python光学仿真实现光线追迹之空间关系

    2023-10-29 01:48:42
  • python数据可视化matplotlib绘制折线图示例

    2023-05-20 23:01:56
  • SQLSERVER 2005的ROW_NUMBER、RANK、DENSE_RANK的用法

    2024-01-21 02:58:02
  • MSSQL数据库的定期自动备份计划。

    2024-01-27 11:01:04
  • php中去除所有js,html,css代码

    2023-07-08 07:59:52
  • 从Node.js事件触发器到Vue自定义事件的深入讲解

    2024-05-03 15:54:28
  • 分享Pytest fixture参数传递的几种方式

    2023-06-15 01:25:28
  • python用字节处理文件实例讲解

    2023-07-18 12:44:50
  • Python实现运行其他程序的四种方式实例分析

    2023-08-03 00:48:24
  • Python Socket传输文件示例

    2023-10-18 17:19:00
  • SQL中去除重复数据的几种方法汇总(窗口函数对数据去重)

    2024-01-14 06:54:35
  • asp之家 网络编程 m.aspxhome.com