自定义mysql函数之字符串逗号分割查询(find_in_set)

news2024/11/18 17:19:58

增强 find_in_set()

在mysql中,我们有时候设计数据库某个字段需要通过逗号进行分割,然后根据传入的字符串查询是否存在的方法进行判断,mysql默认的 find_in_set() 可以对比某个逗号分割的字符串中是否存在指定字符串,例如下面的例子

create table t_test(
    id bigint auto_increment primary key comment 'id',
    name varchar(255) default null comment '名称'
) comment '测试表';

insert into t_test(name) values ('a,b'),('z,k'),('a,c');

在这里插入图片描述

例如:我需要查询,字段中有a的数据,通过 find_in_set() 就可以查询出来

select * from t_test where find_in_set('a', name);

在这里插入图片描述
假如我现在需要判断多个字符串是否都存在于字符串里面,那么就需要下面这么写了,如果字符多了,那么就会很长,所以我们对其进行增强一下,让它可以支持多个字符串

select * from t_test where find_in_set('a', name) or find_in_set('z', name);

增强函数,这样就可以实现多个字符串的查找了

DELIMITER //

CREATE FUNCTION find_in_set_multiple(str_list VARCHAR(255), search_str VARCHAR(255))
RETURNS INT
DETERMINISTIC
BEGIN
    DECLARE pos INT DEFAULT 1;          -- 当前查找的起始位置
    DECLARE result INT DEFAULT 0;       -- 默认返回的匹配结果false
    DECLARE current_str VARCHAR(255);   -- 当前字符串
    DECLARE comma_pos INT;              -- 逗号的位置

    WHILE pos > 0 DO
        SET comma_pos = INSTR(str_list, ',');   -- 查找逗号的位置

        IF comma_pos = 0 THEN                   -- 如果没有逗号,那么字符串就是全部的字符串
            SET current_str = str_list;
            SET pos = 0;
        ELSE
            SET current_str = SUBSTRING(str_list, 1, comma_pos - 1);    -- 截取逗号之前的字符串
            SET str_list = SUBSTRING(str_list, comma_pos + 1);
        END IF;

        -- 如果当前字符串存在于搜索的字符串中,设置结果为1,结束循环
        IF FIND_IN_SET(current_str, search_str) > 0 THEN
            SET result = 1;
            SET pos = 0;
        END IF;
    END WHILE;

    RETURN result;
END //

DELIMITER ;

创建好函数之后对应的改造sql

select * from t_test where find_in_set_multiple(name, 'a,z');

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/543464.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

小程序技术,打开跨端管理的思路,提高客户满意度和忠诚度

小程序容器作为跨端管理的有效工具,已经成为越来越多企业的选择。通过小程序容器,企业可以实现跨平台部署,提供一致的用户体验,整合多种渠道实现全渠道协同,进行个性化营销,以及通过数据分析和监控等手段优…

手把手教你,用Auto-GPT自动写个网站(保姆级)

目录 一、什么是 Auto-GPT 二、用Auto-GPT自动给我实现了一个网站 1、运行过程 2、执行任务 3、运行结果 三、如何安装使用?怎么玩 1、注册OpenAI的账号,并获取key 2、下载Git和Python3(无脑安装) 3、克隆仓库到本地 4、…

【SVN】SVN常用操作

1、svn客户端安装 下载地址:https://tortoisesvn.net/downloads.zh.html 下SVN客户端及汉化包 (根据提示安装即可) 2、检查是否安装成功 在空白处,右键,可见TortoiseSVN,如下图所示 3、检出&#xff…

React Antd Typescript开发碰到的问题 DatePicker Radio should update 后端数据回显

需求: DatePicker控件 离职人员默认显示后端传过来的离职时间 有两种类型页面,编辑时可操作,详情时不可操作 进入编辑页面时,状态切换成在职时,清空离职时间框且离职时间框不可用,字段设置为 undefined 状态…

国际top5功能完善在线投资平台app软件最新排名(综合评测)

如今,随着科技的发展,越来越多的人选择使用在线投资app软件来进行投资。但是面对众多的选择,选择一款靠谱的在线投资app软件是非常重要的。首先,我们需要考虑该软件的安全性。投资是一项涉及资金的活动,因此&#xff0…

高精度示波器keysight是德DSOS054、MSOS054销售回收

安捷伦Keysight DSOS054A MSOS054 500MHZ高清晰度示波器 特征: 带宽:500 MHz,具有平坦的频率响应,可实现高信号保真度 频道:4 最大存储深度:800 Mpts(2 通道),400 Mpt…

新工匠精神是啥

给工匠精神加入新的“工程师”文化 工程化是现代制造的内核 工程师是工程文化的承载人 趣讲大白话:新工匠精神,新在哪里? 【趣讲信息科技170期】 **************************** 工程师文化起源于硅谷 传承工匠精神的,也要加入工程…

本科生高薪专业top10,全被计算机承包了

在每年被唱衰的行业里,即使如高薪神话的IT行业,也难逃此“劫”——IT不行了!疲软了!现在再入行IT和计算机就是坑! 然而事实上,根据最新数据报告显示,2022届本科毕业生毕业半年后月收入排前10位的…

Linux|minio对象存储服务的部署和初步使用总结

前言: minio是一个非常轻量化的对象存储服务,是可以算到云原生领域的。 该服务是使用go语言编写的,因此,主文件就一个文件,它的下载,部署什么的都是非常简单的,一般两三步就可以搭建好了&…

Word控件Spire.Doc 【文本框】教程(6):如何在文本框中设置文本方向

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下,轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具,专注于创建、编辑、转…

腾讯的这道公益「微光」,竟已燎原了

台上开发者们的陆续发言,瞬间把我带到了公益的海洋中。谁都不愿放弃追随那道光,那道热爱公益的光,那道为了解决弱势群体难题与时俱进的光,那道为了文化传承的创新之光。这就是第三届Light•技术公益创造营项目路演现场带给我的直观…

若依框架语言国际化操作流程?

国际化是指将产品、服务、企业或组织的活动适应不同国家、不同文化背景和不同语言环境的过程。它包括将产品或服务适应不同的市场需求、文化习惯和法律法规等方面的工作。国际化的目的是拓展企业或组织的市场,提高竞争力和盈利能力。 目录 一、前端国际化流程 1、html使用…

Gradle接入checkstyle代码风格检查插件

一、什么是checkstyle 在项目开发的过程中,代码规范是经常被提起的话题,特别是当项目需要多个开发协同完成的时候,良好统一的代码规范能够在一定程度上保证项目代码的质量和团队的开发效率。目前业界常见代码检查工具有 Alibaba Java Coding…

二分查找的总结

一、二分查找 1.思路分析 这道题目的前提是数组为有序数组,同时题目还强调数组中无重复元素,因为一旦有重复元素,使用二分查找法返回的元素下标可能不是唯一的,这些都是使用二分法的前提条件,当大家看到题目描述满足如…

Ampere Computing 发布全新 AmpereOne 系列处理器,192 个自研核

2023 年 5 月 19 日,中国北京——Ampere Computing 宣布推出全新 AmpereOne™ 系列处理器,该处理器拥有多达 192 个单线程 Ampere 核,内核数量为业界最高。这是第一款基于 Ampere 新自研核的产品,由 Ampere 自有 IP 全新打造。 致…

chatgpt赋能Python-python3_6怎么打开

Python 3.6:新时代的编程语言 Python 3.6是一种全新的编程语言版本,它提供了全新的功能和改进,使得编程过程更加简便且实用。无论你是编程新手还是老手,本文将教你如何打开Python 3.6,并带你了解Python 3.6的优点。 …

详解c++---多态

目录标题 为什么会有多态什么是虚函数的重写多态的定义特殊的重写重载,覆盖(重写),隐藏(重定义)的对比final和override抽象类多态的原理验证虚表所在额度位置多继承的多态原理菱形虚拟继承多态的一些小点 为…

登录ChatGPT时提示Sorry, you have been blocked(对不起,您已被阻止)

问题描述 今天想使用ChatGPT,结果突然来了这么个问题,就问你吓不吓人???我以为我的账号被封了! 原因分析 内容过滤:某些平台或网站可能使用内容过滤系统,该系统可能将AI语言模型视…

全文索引搜索引擎Zinc

什么是 Zinc ? ZincSearch 是一个搜索引擎,可用于文本数据、日志、指标、事件等。它允许您进行全文搜索,包括将服务器日志发送到 ZincSearch、推送您的应用程序数据、提供全文搜索或在您的应用程序中构建搜索栏。具备与 Elasticsearch API 的…

Android WebView加载网页html文件显示加载进度

效果图如下: 一、视图绑定 通过视图绑定功能,您可以更轻松地编写可与视图交互的代码。在模块中启用视图绑定之后,系统会为该模块中的每个 XML 布局文件生成一个绑定类。绑定类的实例包含对在相应布局中具有 ID 的所有视图的直接引用。 在大…