mysql将某一列的数据根据固定字符拆分后判断存不存在

news2024/10/7 10:19:48

如果数据库的某个字段在存储时是用的逗号分割,如下图所示:

在这里插入图片描述
例如这张表中有一个字段是用的逗号分割,其实这种设计违背了数据库三范式设计原则,如何判断这一列的值包不包含某一个值?

  • 方法一
    用mysql自带的字符串函数去判断某个字符串中有没有包含子字符串,但是这样会有问题。假设某一列的列值如下
924,1157,1158,1748,1810,11574,12483

如果我们现在需要判断1157这个Id是否存在,如果用instr这个函数此时的确可以满足需求。

但是如果把1157这个值剔除去,此时再用instr这个函数去查询,依然可以将本条数据查询出来

924,1158,1748,1810,11574,12483

因为11574这条数据是包含1157这个子字符串的,所以这条数据就被查出来了,但实际情况是这条数据不应该被查出来。
网上有使用借助help_topic这种表来将一列的值按某个特定字符拆成多个列,拆成多个列以后,相当于给这个列作一个inner join 查询或者是子查询。但是不是所有账号有使用help_topic这个表的权限,如何不借助其他表,实现准确查询1157这个id的需求?

  • 使用instr、substring、length函数完成

以下述数据为例

924,1157,1158,1748,1810,11574,12483
  1. 要想判断一个完整的1157id在不在整个字符串中,可以采用如下思路,首先就是使用instr这个函数判断两个字符串是否包含
select instr('11574','1157')

如果这个函数返回值大于0,则说明有子字符串,反之没有则忽略本条数据。

  1. 如果找到了
    则需要进一步这两个字符串长度是否相等,如果相等,则表示两个字符串直接一致。

如果不相等,则需要判断返回的结果是不是0

如果是0,则说明在开头匹配到了1157这个字符串,此时需要根据1157这个字符串的长度去找这个长度 + 1 在大字符中下标处的字符,例如1157的长度是4,4+1 = 5,则需要在大字符串中找下标为5的字符,结果11574这个字符串下标为5的字符是4,这样就不对了,因为如果是个独立的1157,下标为5的这个位置必须是一个逗号,。

如果不是0,这个时候需要判断前一位的下标是不是逗号,以及长度+1位的下标是不是逗号(当然不排除子字符串恰好处于末尾的情况)。
满足以上条件可以判断是否有一个完成的子字符串在大字符串中。

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

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

相关文章

浅析路灯电击安全问题与选型

摘要:介绍了路灯设计安全防护的几个要点,简单分析了路灯低压配电接地系统形式TN-S和TT的选择及剩余电流保护装置在路灯设计中设置的必要性,列举了路灯灯具和灯杆的一些安全技术质量要求。 关键词:路灯配电系统接地形式&#xff1b…

ModaHub魔搭社区:AI原生云向量数据库Zilliz Cloud与 LangChain 集成搭建智能文档问答系统

目录 准备工作 主要参数 准备数据 开始提问 本文将演示如何使用 Zilliz Cloud 和 LangChain 搭建基于大语言模型(LLM)的问答系统。在本例中,我们将使用一个 1 CU 的 Cluster,还将使用 OpenAI 的 Embedding API 来获取指定文本的向量表示。现在就让我们开始吧。 准备工作…

谈谈对SpringMVC的理解

1、SpringMVC是属于SpringFramework生态里面的一个模块,它是在Servelet基础上构建的,并且使用了MVC模式设计的一个Web框架; 2、它的主要目的是为了简化传统模式下的Serveletjsp的开发模式,其次SpringMVC的架构模式是对于Java的web…

基于CrowdHuman数据集的高精度行人检测系统(PyTorch+Pyside6+YOLOv5模型)

摘要:基于CrowdHuman数据集的高精度行人检测系统可用于日常生活中检测与定位行人目标,利用深度学习算法可实现图片、视频、摄像头等方式的行人目标检测识别,另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检测模型训练…

计组 第四章 错题

4.1 13 汇编指令能看到什么 II 体系结构没有变 小端法

# Java 并发编程的艺术(三)

Java 并发编程的艺术(三) 文章目录 Java 并发编程的艺术(三)Java 内存模型Java 内存模型的基础Java 内存模型的抽象结构从源代码到指令序列的重排序 重排序happens-beforeJMM 的设计happens-before 的定义 Java 中的锁Lock 接口代…

Java零基础入学,你应该了解什么

最近很多人问我想学Java但是一点基础没有,网上看了一堆学习线路图还是无从下手。今天耗时3小时整理了一套保姆级的Java入门教程,建议收藏按照线路图一点点学习。 一、Java的概况 Java是1995年6月美国Sun公司推出的计算机语言。Java支付是James Gosling…

java动态导出excel头

java动态导出excel头 java根据动态头导出excel文件一、需求背景1、调用接口将表头传给给后端2、请求结果展示3、核心代码1、工具类,注意异常抛出类如报错,需自定义异常类2、标题设置类3、单元各简单设置类4、controller接收参数 java根据动态头导出excel…

大势Inside |《倾斜摄影测量实景三维建模技术规程》发布

2023年6月21日,由广西壮族自治区自然资源产品质量检验中心、广西科学院、武汉大学提出,武汉大势智慧科技有限公司、武汉大学、广西科学院等27家单位起草的广西人工智能学会团体标准《倾斜摄影测量实景三维建模技术规程》正式发布。 此前,广西…

今天给大家分享几款非常实用的小工具

在当今数字化的时代,我们离不开各种智能设备和应用程序。然而,有时候我们可能会感到需要一些简单而实用的小工具来帮助我们更高效地完成日常任务或提升生活品质。今天我将与大家分享几款非常实用的小工具,这些工具可以在我们的生活中发挥积极…

Vue3+ElementPlus el-tree递归获取当前选中节点的所有子节点ID (适用所有场景)

点击节点触发两遍此方法问题 将@check-change改成@check即可~ 然后说下选中当前节点去获取其节点下的所有子节点的ID问题,网上搜了许多没有合适自己的方法,项目需求是单选,用了父子不关联的方法实现的单选,需要做下控制就是父节点不允许点击的情况下的子节点也不允许点击…

程序员如何高质量重构代码?

有道无术,术尚可求也,有术无道止于术。你好,我是程序员雪球,今天和你聊聊程序员重构代码那些事。 程序员重构代码的重要性不言而喻,但如何进行有效的重构呢?下面是一些建议和指导。 为什么要重构&#xff…

宝塔安装勾股OA系列服务

勾股oa地址 勾股OA办公系统—开源的OA办公系统 一、服务器配置 二、安装宝塔 1.下载宝塔面板、设置宝塔面板、增加网站。 yum install -y wget && wget -O install.sh https://download.bt.cn/install/install_6.0.sh && sh install.sh ed8484bec 根据提示…

Elasticsearch 倒排索引原理

看下面这个表格里的文档内容: 如果我这时候想要在这么多文档中查找带有 比亚迪 的我要怎么查,传统这个查询里面我想查这个比亚迪的话。就是先在文档1里面搜索一下有没有 比亚迪,没有,我在到文档2中查找比亚迪,还是没有…

go-zero系列-限流(并发控制)

参考文章:https://go-zero.dev/docs/tutorials/service/governance/limiter 步骤: 1、压测工具hey下载安装: go install github.com/rakyll/hey (会安装到GOPATH/bin目录下)2、在yaml配置文件中加入: #最大连接数 MaxConns: 10…

数字化时代:虚拟数字人的智能进化与生活变革

我们需要实现对人工智能的有效监管。政府应该与科技公司合作,建立监管框架,确保人工智能的发展能够在保护人类利益的基础上进行。人工智能的快速发展带来了巨大的机遇,但同时也伴随着一些潜在的风险。如果没有适当的监管措施,人工…

【华为OD机试】完全二叉树非叶子部分后序遍历【2023 B卷|200分】

【华为OD机试】-真题 !!点这里!! 【华为OD机试】真题考点分类 !!点这里 !! 题目描述: 给定一个以顺序储存结构存储整数值的完全二叉树序列(最多1000个整数), 请找出此完全二叉树的所有非叶子节点部分,然后采用后序遍历方式将此部分树(不包含叶子)输出。 1、只有一个…

[RocketMQ] Broker 消息刷盘服务源码解析 (十二)

同步刷盘: 在消息真正持久化至磁盘后RocketMQ的Broker端才会真正返回给Producer端一个成功的ACK响应。异常刷盘: 能够充分利用OS的PageCache的优势, 只要消息写入PageCache即可将成功的ACK返回给Producer端。消息刷盘采用后台异步线程提交的方式进行, 降低了读写延迟和提高了MQ…

LT15 取消TO 显示 转储请求项目 WH XXX 0001 不存在

LT15取消TO的时候,收到的错误收件箱信息 这个实际就是一个BUG,目前是无解的。 最后SAP官方使用debug处理掉的(如果自己艺高人胆大的话也可以处理) 以下为官方处理后的回复: the document has been cancelled. In L…

cobaltStrike克隆网站

试验目的 使用CS克隆网站获取键盘试验实验准备 kali cs实验步骤 启动cs服务端 sudo su切换root权限 进入cs目录 使用chmod 获取目录内最高权限 ./teamserver 192.168.24.131 12456 启动服务端[./teamserverip设置密码] 启动客户端登录并建立监听 打开新终端 切换进入cs目录 .…