当前位置: 首页 > article >正文

MySQL中FIND_IN_SET函数与INSTR函数用法解析

一、功能定义与语法

1、FIND_IN_SET函数

语法:FIND_IN_SET(str, strlist)
功能:在逗号分隔的字符串列表(strlist)中查找精确匹配的子字符串(str),并返回其位置(从1开始)。若未找到,返回0。
核心特点

  • 仅支持逗号分隔的列表(如"apple,banana,orange")。
  • 要求子字符串是列表中的独立元素(如FIND_IN_SET(“apple”, “apple,juice”)返回1,但FIND_IN_SET(“app”, “apple”)返回0)。
  • 区分大小写。

2、INSTR函数

语法:INSTR(str, substr)
功能:在字符串(str)中查找子字符串(substr)的首次出现位置(从1开始),若未找到返回0。
核心特点

  • 支持任意字符串搜索,不依赖分隔符。
  • 匹配的是子字符串的连续片段(如INSTR(“apple”, “app”)返回1)。
  • 区分大小写。

二、本质区别对比


对比维度FIND_IN_SETINSTR
数据结构要求依赖逗号分隔的列表无特殊格式要求
匹配规则精确匹配列表中的独立元素模糊匹配任意连续子字符串
性能影响需遍历列表元素,大字符串效率较低通常更高效,但依赖索引和字符串长度
使用场景多值字段查询(如标签、分类列表)通用子字符串搜索(如日志、长文本)
返回值逻辑元素位置(从1开始)或0子字符串起始位置或0

三、实际场景案例分析

场景1:查询包含特定标签的数据

假设表articles中有一个字段tags,存储逗号分隔的标签(如"mysql,database,optimization")。

  • 需求:查找包含标签"mysql"的文章。

  • 正确用法:

SELECT * FROM articles WHERE FIND_IN_SET('mysql', tags) > 0;

结果:精确匹配独立的标签元素,避免误判(如"mysql-server"不会被匹配)。

  • 错误用法:
SELECT * FROM articles WHERE INSTR(tags, 'mysql') > 0;

问题:可能匹配到非独立元素(如"mysql-server"中的"mysql"),导致结果不准确。
场景2:搜索日志中的关键词
假设表logs中有一个字段message,存储日志文本(如"Error: Connection timeout")。
需求:查找包含关键词"timeout"的日志。
正确用法:

SELECT * FROM logs WHERE INSTR(message, 'timeout') > 0;

结果:快速定位子字符串,无论其上下文格式。
错误用法:

SELECT * FROM logs WHERE FIND_IN_SET('timeout', message) > 0;

问题:FIND_IN_SET要求逗号分隔的列表,若message不是逗号分隔的结构,查询将失效。

四、性能与设计建议

1、性能对比

	- FIND_IN_SET需要对逗号分隔的列表进行拆分和遍历,时间复杂度为O(n),不适用于超长字符串。- INSTR通常使用优化的字符串搜索算法(如Boyer-Moore),效率更高,但仍可能因无索引而全表扫描。

2、设计建议

  • 避免使用逗号分隔存储多值字段:推荐使用关联表(如article_tags)实现多对多关系,提升查询效率和规范性。
  • 合理选择函数:
    • 若必须使用逗号分隔字段,优先使用FIND_IN_SET确保精确匹配。
    • 对非结构化文本搜索,选择INSTR或LIKE。
  • 考虑全文索引:对高频搜索的长文本字段,建议使用MySQL的全文索引(FULLTEXT)提升性能。

五、总结

FIND_IN_SET和INSTR的本质区别在于数据结构的依赖和匹配规则:

  • FIND_IN_SET专为逗号分隔列表设计,强调元素的独立性。

  • INSTR是通用的子字符串搜索工具,不依赖特定格式。

相关文章:

MySQL中FIND_IN_SET函数与INSTR函数用法解析

一、功能定义与语法 1、FIND_IN_SET函数 语法:FIND_IN_SET(str, strlist) 功能:在逗号分隔的字符串列表(strlist)中查找精确匹配的子字符串(str),并返回其位置(从1开始&#xff09…...

Python贝叶斯回归、强化学习分析医疗健康数据拟合截断删失数据与参数估计3实例

全文链接:https://tecdat.cn/?p41391 在当今数据驱动的时代,数据科学家面临着处理各种复杂数据和构建有效模型的挑战。本专题合集聚焦于有序分类变量处理、截断与删失数据回归分析以及强化学习模型拟合等多个重要且具有挑战性的数据分析场景&#xff0c…...

Git 协同开发的常用操作

1. 单仓库(多分支开发) 从远程拉取代码 git clone https://gitee.com/...查看当前分支 git branch -- *master创建并切换到你的开发分支(my-dev) git checkout -b my-dev查看当前分支 git branch -- marster -- *my-dev提交代…...

微信小程序 -- 原生封装table

文章目录 table.wxmltable.wxss注意 table.js注意 结果数据结构 最近菜鸟做微信小程序的一个查询功能,需要展示excel里面的数据,但是菜鸟找了一圈,也没发现什么组件库有table,毕竟手机端好像确实不太适合做table! 菜鸟…...

分布式文件存储系统FastDFS

文章目录 1 分布式文件存储1_分布式文件存储的由来2_常见的分布式存储框架 2 FastDFS介绍3 FastDFS安装1_拉取镜像文件2_构建Tracker服务3_构建Storage服务4_测试图片上传 4 客户端操作1_Fastdfs-java-client2_文件上传3_文件下载4_获取文件信息5_问题 5 SpringBoot整合 1 分布…...

ZKmall开源商城服务端验证:Jakarta Validation 详解

ZKmall开源商城基于Spring Boot 3构建,其服务端数据验证采用Jakarta Validation API​(原JSR 380规范),通过声明式注解与自定义扩展机制实现高效、灵活的数据校验体系。以下从技术实现、核心能力、场景优化三个维度展开解析&#…...

深度分页及优化建议

深度分页的定义 深度分页是指在分页查询中,当用户请求非常靠后的页面时,数据库需要处理大量数据,导致查询性能显著下降的情况。例如,一个查询结果有 100 万条记录,而用户要查询第 999 页(每页 10 条记录&a…...

电网电能质量分析:原理、算法及实际应用

一、引言 在现代社会,电力供应的稳定性和可靠性对工业生产、社会生活的各个方面都至关重要。电能质量作为衡量电力系统供电能力的关键指标,其优劣直接影响到电力设备的运行效率、使用寿命以及生产过程的稳定性。随着电力系统规模的不断扩大,新…...

学透Spring Boot — 017. 魔术师—Http消息转换器

本文是我的专栏《学透Spring Boot》的第17篇文章,了解更多请移步我的专栏: 学透 Spring Boot_postnull咖啡的博客-CSDN博客 目录 HTTP请求和响应 需求—新的Media Type 实现—新的Media Type 定义转换器 注册转换器 编写Controller 测试新的medi…...

BOE(京东方)旗下控股子公司“京东方能源”成功挂牌新三板 以科技赋能零碳未来

2025年4月8日,BOE(京东方)旗下控股子公司京东方能源科技股份有限公司(以下简称“京东方能源”)正式通过全国中小企业股份转让系统审核,成功在新三板挂牌(证券简称:能源科技,证券代码:874526),成为BOE(京东方)自物联网转型以来首个独立孵化并成功挂牌的子公司。此次挂牌是BOE(京…...

Airflow集成Lark机器人

🥭1. 实现目标 🕐 通过自定义函数,实现Lark机器人告警功能 🕐 通过Lark机器人代替邮件数据的发送功能 🥭2.自定义函数实现 from airflow import DAG from airflow.operators.python_operator import PythonOperator from airflow.models import Variable import requ…...

Git使用与管理

一.基本操作 1.创建本地仓库 在对应文件目录下进行: git init 输入完上面的代码,所在文件目录下就会多一个名为 .git 的隐藏文件,该文件是Git用来跟踪和管理仓库的。 我们可以使用 tree 命令(注意要先下载tree插件&#xff09…...

计算机网络——传输层(Udp)

udp UDP(User Datagram Protocol,用户数据报协议 )是一种无连接的传输层协议,它在IP协议(互联网协议)之上工作,为应用程序提供了一种发送和接收数据报的基本方式。以下是UDP原理的详细解释&…...

网络安全小知识课堂(五)

病毒与蠕虫:你的电脑为何会 “生病” 和 “传染”? 引言 你是否见过这样的场景:电脑突然弹窗广告暴增,文件莫名消失,甚至整个公司网络集体瘫痪?这些症状背后,可能是 ** 病毒(Virus…...

图解Java设计模式

1、设计模式面试题 2、设计模式的重要性 3、7大设计原则介绍 3.1、单一职责原则...

wsl2+ubuntu22.04安装blender教程(详细教程)

本章教程介绍,如何在Windows操作系统上通过wsl2+ubuntu安装blender并运行教程。Blender 是一款免费、开源的 ​​3D 创作套件​​,广泛应用于建模、动画、渲染、视频编辑、特效制作等领域。它由全球开发者社区共同维护,支持跨平台(Windows、macOS、Linux),功能强大且完全…...

其他合成方式介绍

在 SurfaceFlinger 的 Layer 处理逻辑中,除了常见的 Client Composition(GPU合成) 和 Device Composition(HWC合成),还存在一些特殊的合成方式,比如 Sideband、Solid Color 和 Display Decorati…...

Spring AI Alibaba MCP 市场正式上线!

Spring AI Alibaba 正式上线 MCP 市场:Spring AI Alibaba-阿里云Spring AI Alibaba官网官网。 开发者可以在这里搜索市面上可用的 MCP Server 服务,了解每个服务的实现与接入方法。 MCP 市场是做什么的? Spring AI Alibaba MCP 当前主要提供…...

Spring Security基本入门

1、为什么要使用权限框架 权限管理是所有后台系统的都会涉及的一个重要组成部分,主要目的是对不同的人访问资源进行权限的控制,避免因权限控制缺失或操作不当引发的风险问题,如操作错误,隐私数据泄露等问题。 2、权限管理的常见…...

【Hadoop入门】Hadoop生态圈概述:核心组件与应用场景概述

1 Hadoop生态圈概述 Hadoop生态圈是以 HDFS(分布式存储) 和 YARN(资源调度) 为核心,围绕大数据存储、计算、管理、分析等需求发展出的一系列开源工具集合。 核心特点: 模块化:各组件专注解决特定…...

深入理解 Spring 的 MethodParameter 类

MethodParameter 是 Spring 框架中一个非常重要的类,它封装了方法参数(或返回类型)的元数据信息。这个类在 Spring MVC、AOP、数据绑定等多个模块中都有广泛应用。 核心功能 MethodParameter 主要提供以下功能: 获取参数类型信息…...

人工智能:GPT技术应用与未来展望

GPT(Generative Pre-trained Transformer)作为自然语言处理领域的代表性技术,近年来在各行业的实际应用中展现出广泛潜力。结合其技术特性与行业需求,以下是GPT的主要应用场景、案例分析及未来挑战的总结: 一、核心应用领域与案例 文本生成与内容创作 自动化内容生产:GPT…...

解决编译内核报错:No rule to make target ‘debian/canonical-certs.pem‘

解决编译内核报错:No rule to make target ‘debian/canonical-certs.pem‘问题 更换内核后重新编译内核报错1如下: make[1]: *** No rule to make target debian/canonical-certs.pem, needed by certs/x509_certificate_list. Stop. make: *** [Mak…...

spring mvc中不同服务调用类型(声明式(Feign)、基于模板(RestTemplate)、基于 SDK、消息队列、gRPC)对比详解

RestControllerAdvice 和 ControllerAdvice 对比详解 1. 基本概念 注解等效组合核心作用ControllerAdviceComponent RequestMapping(隐式)定义全局控制器增强类,处理跨控制器的异常、数据绑定或全局响应逻辑。RestControllerAdviceControll…...

【Java设计模式】第1章 课程导学

第1章 课程导学 1-1 课堂导学 课程介绍 设计模式是工程师必备知识,面试高频考点。课程目标:提炼常用设计模式精华,结合场景演进和源码解析,系统学习设计模式。课程特色: 动态递进式讲解,通过场景变化展示…...

Java + WebAssembly 2025:如何用Rust优化高性能Web应用?

📝 摘要 随着WebAssembly(WASM)技术的成熟,Java开发者现在可以通过结合Rust来构建更高性能的Web应用。本文将详细介绍如何在2025年的技术栈中使用Java和Rust通过WebAssembly实现性能优化,包括基础概念、实际应用场景、详细代码示例以及性能对…...

MCU控制4G模组(标准AT命令),CatM的最大速率?

根据3GPP标准,Cat M1的上行峰值速率大约是1 Mbps,下行大约是1 Mbps。但实际速率会受到多种因素影响,比如网络条件、信号强度、模块配置等。 考虑使用AT命令时的开销。每次发送数据都需要通过AT命令,比如ATQISEND,会引…...

致远OA —— 表单数据获取(前端)

文章目录 :apple: 业务需求描述 🍎 业务需求描述 测试案例: https://pan.quark.cn/s/3f58972f0a27 官网地址: https://open.seeyoncloud.com/v5devCAP/94/355/359/399/405/406.html 需求描述: 点击获取数据接口,…...

游戏引擎学习第214天

总结并为当天的任务做好准备 昨天,我们将所有调试控制代码迁移到使用新的调试接口中,但我们没有机会实际启用这些代码。我们做了很多准备工作,比如规划、将其做成宏、并将其放入调试流中,但实际上我们还没有办法进行测试。 今天…...

码率自适应(ABR)相关论文阅读简报2

论文5简介 标题:PAR:IMPROVING VIDEO BITRATE ADAPTATION VIA PAYLOAD-A W ARE THROUGHPUT PREDICTION 作者:Jialiang Pei, Congkai An, Anfu Zhou, Liang Liu, Huadong Ma 单位: 中国北京邮电大学计算机学院 发表会议: Conference on Mu…...