MYSQL查询某字段中以逗号分隔的字符串的方法

MYSQL查询某字段中以逗号分隔的字符串的方法

https://www.cnblogs.com/gmq-sh/p/6848929.html
 
首先我们建立一张带有逗号分隔的字符串。

CREATE TABLE test(id int(6) NOT NULL AUTO_INCREMENT,PRIMARY KEY (id),pname VARCHAR(20) NOT NULL,pnum VARCHAR(50) NOT NULL);

然后插入带有逗号分隔的测试数据
INSERT INTO test(pname,pnum) VALUES(‘产品1′,’1,2,4’);
INSERT INTO test(pname,pnum) VALUES(‘产品2′,’2,4,7’);
INSERT INTO test(pname,pnum) VALUES(‘产品3′,’3,4’);
INSERT INTO test(pname,pnum) VALUES(‘产品4′,’1,7,8,9’);

INSERT INTO test(pname,pnum) VALUES(‘产品5′,’33,4’);

 

查找pnum字段中包含3或者9的记录
MySQL> SELECT * FROM test WHERE find_in_set(‘3’,pnum) OR find_in_set(‘9’,pnum);
+—-+——-+———+
| id | pname | pnum    |
+—-+——-+———+
|  3 | 产品3 | 3,4     |
|  4 | 产品4 | 1,7,8,9 |
+—-+——-+———+
2 rows in set (0.03 sec)

 

使用正则
mysql> SELECT * FROM test WHERE pnum REGEXP ‘(3|9)’;
+—-+——-+———+
| id | pname | pnum    |
+—-+——-+———+
|  3 | 产品3 | 3,4     |
|  4 | 产品4 | 1,7,8,9 |
|  5 | 产品5 | 33,4    |
+—-+——-+———+
3 rows in set (0.02 sec)
这样会产生多条记录,比如33也被查找出来了。

 

换一种方式

 

 

  1. mysql> SELECT * FROM test WHERE CONCAT(‘,’,pnum,‘,’) REGEXP ‘[^0-9]+[3|9][^0-9]+’;  

+—-+——-+———+
| id | pname | pnum    |
+—-+——-+———+
|  3 | 产品3 | 3,4     |
|  4 | 产品4 | 1,7,8,9 |
+—-+——-+———+
2 rows in set (0.01 sec)

 

 

3、select * from oa_student_archives where CONCAT(‘,’,pe_projects,’,’) like ‘%,11,%’;

这种方式也可以。

 

注意:

标红的mysql> SELECT * FROM test WHERE CONCAT(‘,’,pnum,‘,’) REGEXP ‘[^0-9]+[3|9][^0-9]+’; 

这种,当时小于10的数据搜索是可以的,但是如果是大于10的,则不能用,原因我还不太清楚,有大神可以解释下吗?

 

总结如下:

1、select * from oa_student_archives where CONCAT(‘,’,pe_projects,’,’) like ‘%,11,%’;

2、select * from oa_student_archives where find_in_set(’12’, pe_projects);

 

以上的两个都可以用。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/113473.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Spring中@Transactional事务回滚(含实例详细讲解,附源码)

    Spring中@Transactional事务回滚(含实例详细讲解,附源码)

    2020年11月12日
    160
  • dsp28335复位电路_28335串口不能中断

    dsp28335复位电路_28335串口不能中断0前言本期实验目标:采用外部中断方式响应按键触发,实现LED电平反转。外部中断是DSP十分常用的功能,通常用来响应一些控制操作,比如判断按键是否按下,传感器是否接收到信号等等。那么通过该例程,大家则可以快速学会使用外部中断的功能!本节仍然将分为硬件部分、软件部分和实验展示三个方面进行介绍。1硬件部分DSP28335支持XINT1-XINT7和XNMI共8路外部中断源,其中中断源XINT1/2和XNMI可以设定为从GPIO端口A的任意一个管脚输入,即GPIO0-GPIO31。而XINT3/4/5/

    2025年9月26日
    4
  • 少儿编程是学什么的(小学编程是学些什么东西)

    前言  我是一位从业十年的程序员,也是一位程序员爸爸。十年来,一直coding,从未停歇。既做过传统行业的软件,也做过移动互联网产品,甚至还曾在年少时,闯荡过幼教产品的创业大潮。作为程序员爸爸(或许应该叫工程师爸爸,换个称呼可以让孩子更崇拜),我时常在想我家的小朋友是否应该学习或者接触一下编程?那么说到编程,就必然需要先理解一下编程是什么?少儿编程又是什么?对于前者,我期望从实践者的视角作出我的…

    2022年4月15日
    77
  • 常见计算机病毒类型及原理「建议收藏」

    常见计算机病毒类型及原理「建议收藏」杀毒软件是根据什么来进行病毒判断并查杀得呢?病毒检测的方法在与病毒的对抗中,及早发现病毒很重要。早发现,早处置,可以减少损失。检测病毒方法有:特征代码法、校验和法、行为监测法、软件模拟法这些方法依据的原理不同,实现时所需开销不同,检测范围不同,各有所长。特征代码法特征代码法被早期应用于SCAN、CPAV等著名病毒检测工具中。国外专家认为特征代码法是检

    2022年6月5日
    43
  • 中心极限与大数定理律的关系_大数定理的通俗理解(辛钦、伯努利、切比雪夫大数定理)…

    中心极限与大数定理律的关系_大数定理的通俗理解(辛钦、伯努利、切比雪夫大数定理)…大数定理简单来说 指得是某个随机事件在单次试验中可能发生也可能不发生 但在大量重复实验中往往呈现出明显的规律性 即该随机事件发生的频率会向某个常数值收敛 该常数值即为该事件发生的概率 另一种表达方式为当样本数据无限大时 样本均值趋于总体均值 因为现实生活中 我们无法进行无穷多次试验 也很难估计出总体的参数 大数定律告诉我们能用频率近似代替概率 能用样本均值近似代替总体均值 很好得解决了现实问题 大

    2025年6月8日
    2
  • 提升效率的秘密,仅需这一篇吃透负载均衡

    提升效率的秘密,仅需这一篇吃透负载均衡写在前面写本文的目的: 对负载均衡的理解零零散散,不成体系。 阅读这篇文章需要的条件: 对OSI模型有些许了解 有耐心。本文涉及大量的知识点,且只能用文字才能讲清楚,所以文字比较多。 收获: 读完此篇文章,从宏观的角度理解了负载均衡的原理以及实现机制。加深对分布式架构的了解 主要内容: 本文首先从概念开始,讲解什么是负载均衡,以及负载均衡在分布式系统中所承担的角色以及提供的功能。 讲解负载均衡的分类。分别从软硬件角度、地域范围角度以及…

    2022年7月19日
    11

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号