mysql字符串函数:FIND_IN_SET()使用方法详解

mysql字符串函数:FIND_IN_SET()使用方法详解

语法:

FIND_IN_SET(str,strlist)

  • 第一个参数str是要查找的字符串。
  • 第二个参数strlist是要搜索的逗号分隔的字符串列表。

 

假如字符串str 在由N 子链组成的字符串列表strlist 中,则返回值的范围在 1 到 N 之间。

 

一个字符串列表就是一个由一些被‘,’符号分开的子链组成的字符串。如果第一个参数是一个常数字符串,而第二个是type SET列,则 FIND_IN_SET() 函数被优化,使用比特计算。

 

如果str不在strlist 或strlist 为空字符串,则返回值为 0 。如任意一个参数为NULL,则返回值为 NULL。这个函数在第一个参数包含一个逗号(‘,’)时将无法正常运行。

 

案例:

现在有一张users表,如下:

id user_name emails
1 小张 a@fujieace.com,b@fujieace.com,c@fujieace.com
2 小王 aa@fujieace.com,bb@fujieace.com,cc@fujieace.com
3 李四 aa@fujieace.com,b@fujieace.com,d@fujieace.com
4 王五 aa@fujieace.com,e@fujieace.com,f@fujieace.com

 

问:我们如何用sql查找所有“emails”字段中有“aa@fujieace.com”的用户?

 

答:用以下sql即可实现;

 
  1. select * from users where FIND_IN_SET(‘aa@fujieace.com’,emails);

 

拓展知识:

 
  1. mysql> SELECT FIND_IN_SET(‘b’,’a,b,c,d’);
  2. -> 2 

因为:b 在strlist集合中放在2的位置,计算从1开始,不是从0开始;

 

 
  1. select FIND_IN_SET(‘1′,’1’);

返回值:就是1;

这时候的strlist集合有点特殊,只有一个字符串,其实就是要求前一个字符串一定要在后一个字符串集合中才返回 大于0的数;

 

 
  1. select FIND_IN_SET(‘2′,’1,2’);返回2
  2. select FIND_IN_SET(‘6′,’1’); 返回0

 

注意事项:

 
  1. select * from fujieace where FIND_IN_SET(id,’1,2,3,4,5′);

使用find_in_set函数一次返回多条记录;

id 是一个表的字段 然后每条记录分别是id等于1,2,3,4,5的时候;

 

有点类似in (集合)

 
  1. select * from fujieace where id in (1,2,3,4,5);

转载: https://www.fujieace.com/mysql/functions/find_in_set.html

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

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

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


相关推荐

  • max31865C语言程序,max31865+pt100温度传感器实验代码

    max31865C语言程序,max31865+pt100温度传感器实验代码max31865+pt100温度传感器实验代码资源下载此资源下载价格为2D币,请先登录资源文件列表keilkilll.bat,399CORE/core_cm3.c,17273CORE/core_cm3.h,85714CORE/startup_stm32f10x_hd.s,15503FWLIB/inc/misc.h,8982FWLIB/inc/stm32f10x_adc.h,…

    2022年6月26日
    35
  • 进程和线程的区别(超详细)

    进程和线程的区别(超详细)进程和线程进程一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间,一个进程可以有多个线程,比如在Windows系统中,一个运行的xx.exe就是一个进程。线程进程中的一个执行任务(控制单元),负责当前进程中程序的执行。一个进程至少有一个线程,一个进程可以运行多个线程,多个线程可共享数据。与进程不同的是同类的多个线程共享进程的堆和方法区资源,但每个线程有自己的程序计数器、虚拟…

    2022年7月25日
    10
  • resnet源码pytorch_pytorch conv1d

    resnet源码pytorch_pytorch conv1d#Pytorch 0.4.0 ResNet34实现cifar10分类.#@Time:2018/6/17#@Author:xfLiimporttorchvisionastvimporttorchastimporttorchvision.transformsastransformsfromtorchimportnnfromtorch.utils.da…

    2022年10月6日
    0
  • 命令提示符运行Python程序

    命令提示符运行Python程序1.打开DOS窗口快捷键windows+R2.切换目录到Python程序所在的目录我的Python程序存放在D:\python\program中,文件为hi.py

    2022年10月20日
    0
  • C#没有.sln文件怎么办?

    C#没有.sln文件怎么办?如果你的C#文件夹下没有.sln文件,你可以用VisualStudio软件,文件->打开->项目/解决方案,在指定的文件夹下找到.csproj文件,在你关闭时,会提示你保存成.sln文件,以后就可以直接打开了。

    2022年6月6日
    167
  • Linux用netstat查看服务及监听端口详解

    Linux用netstat查看服务及监听端口详解在Linux使用过程中,需要了解当前系统开放了哪些端口,并且要查看开放这些端口的具体进程和用户,可以通过netstat命令进行简单查询netstat命令各个参数说明如下:-a或–all显示所有连线中的Socket。-A<网络类型>或–…

    2022年7月23日
    7

发表回复

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

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