网络编程
位置:首页>> 网络编程>> 数据库>> SQL查询之字段是逗号分隔开的数组如何查询匹配数据问题

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

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

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

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

0
投稿

猜你喜欢

  • Django是一种基于Python的Web开发框架一、在命令行中创建Django项目(Windows平台、python3.6)1、建立虚拟环
  • 这篇文章主要介绍了Python如何使用字符打印照片,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可
  • 在日常工作中,PPT制作是常见的工作,如果制作创意类PPT,则无法通过自动化的形式生成,因为创意本身具有随机性,而自动化解决的是重复性工作,
  • 在网上有很多文章介绍数据库优化知识,但是大部份文章只是对某个一个方面进行说明,而对于我们程序员来说这种介绍并不能很好的掌握优化知识,因为很多
  • SQL Server推荐使用 SET 而不是 SELECT 对变量进行赋值。当表达式返回一个值并对一个变量进行赋值时,推荐使用 SET 方法
  • 安装pip(3) install pyecharts此文版本为v1.6此文版本为v1.6此文版本为v1.6效果图使用Pycharts绘制一个
  • 前言为了满足用户渠道推广分析和用户账号绑定等场景的需要,公众平台提供了生成带参数二维码的接口。使用该接口可以获得多个带不同场景值的二维码,用
  • 本文实例讲述了PHP实现断点续传乱序合并文件的方法。分享给大家供大家参考,具体如下:分割成多个文件发送,由于网络原因并不上先发就能发接收到。
  • 一 引入我们学习变量是为了让计算机能够像人一样去记忆事物的某种状态,而变量的值就是用来存储事物状态的,很明显事物的状态分成不同种类的(比如人
  •  Python中格式化format()方法详解Python中格式化输出字符串使用format()函数, 字符串即类, 可以使用方法
  • 关键字:js验证表单大全,用JS控制表单提交 ,javascript提交表单:目录:1:js 字符串长度限制、判断字符长度 、js限制输入、
  • 在训练模型时会在前面加上:model.train()在测试模型时在前面使用:model.eval()同时发现,如果不写这两个程序也可以运行,
  • 打算学习 Python 来做数据分析的你,是不是在开始时就遇到各种麻烦呢?到底该装 Python2 呢还是 Python3 ?为什么安装 P
  • 经常会看到这种弹出层背景变暗的效果,感觉手痒于是自己写了一个基于jquery的弹出层类。我习惯先写好结构和样式,然后再写js交互效果。结构定
  • 一、通信方式进程彼此之间互相隔离,要实现进程间通信(IPC),multiprocessing模块主要通过队列方式队列:队列类似于一条管道,元
  • 上一小节讲解了行高与单行纯文字的垂直居中,而如果行内含有图片和文字,在浏览器内浏览时,读者可以发现文字和图片在垂直方向并不是沿中线居中,而是
  • 一、Requests库的安装利用 pip 安装,如果你安装了pip包(一款Python包管理工具,不知道可以百度哟),或者集成环境,比如Py
  • 概述本文主要介绍一种降维方法,PCA(Principal Component Analysis,主成分分析)。降维致力于解决三类问题。1.
  • PHP registerXPathNamespace() 函数实例为下一个 XPath 查询创建命名空间上下文:<?php $xml=
  • 1 简介DataFrame是Python中Pandas库中的一种数据结构,它类似excel,是一种二维表。或许说它可能有点像matlab的矩
手机版 网络编程 asp之家 www.aspxhome.com