mysql判断两个字符串(以逗号分隔)是否存在交集
转载:https://blog.csdn.net/username666/article/details/107815331?utm_medium=distribute.pc_relevant.none-task-blog-OPENSEARCH-6.not_use_machine_learn_pai&depth_1-utm_source=distribute.pc_relevant.none-task-blog-OPENSEARCH-6.not_use_machine_learn_pai
最近有需要用到求两个字符串是否有交集(原本想要求相似度的,暂时无法实现,只好转为判断是否存在交集的替代方案)方法,暂时找到以下2个方法。
方法一:正则
select concat(str1, ',') regexp concat(replace(str2,',',',|'),',');
示例:
select '123|456|125' regexp '123|126'; -- 1
select '123' regexp '123|456'; -- 1
select concat('123,456', ',') regexp concat(replace('456,789',',',',|'),','); -- 1
select concat('123,456', ',') regexp concat(replace('456,',',',',|'),','); -- 1
select concat('电子信息,科技', ',') regexp concat(replace('软件工程,电子信息,概率统计',',',',|'),','); -- 1
select concat(',', ',') regexp concat(replace('软件工程,电子信息,概率统计',',',',|'),','); -- 0
方法二:
DROP FUNCTION IF EXISTS `INTE_ARRAY`;
-- 集合交集检查函数
-- @param varchar(255) setA A 集合 如 "1,3,5,9"
-- @param varchar(255) setB B 集合 如 "8,2,3,7"
-- @return int(1) B 集合内单元在 A集合 内存在则返回 1 否则返回 0
CREATE DEFINER=`root`@`localhost` FUNCTION `INTE_ARRAY` (setA varchar(255),setB varchar(255)) RETURNS int(1)
DETERMINISTIC
BEGIN
DECLARE idx INT DEFAULT 0 ; -- B 集合单元索引
DECLARE len INT DEFAULT 0;-- B 集合表达式长度
DECLARE llen INT DEFAULT 0;-- 最后检查位置
DECLARE clen INT DEFAULT 0;-- 当前检查位置
DECLARE tmpStr varchar(255);-- 临时检查数据集
DECLARE curt varchar(255);-- B 当前检查的单元
SET len = LENGTH(setB);
WHILE idx < len DO
SET idx = idx + 1;
SET tmpStr = SUBSTRING_INDEX(setB,",",idx);
SET clen = LENGTH(tmpStr);
-- 获取当前 setB 中的单元
IF idx = 1 THEN SET curt = tmpStr;
ELSE SET curt = SUBSTRING(setB,llen+2,clen-llen-1);
END IF;
-- 检查是否存在于 setA 中
IF curt != '' and FIND_IN_SET(curt,setA) > 0 THEN RETURN 1;
END IF;
-- 当前检查终点与上次检查终点相同则跳出
IF clen <= llen THEN RETURN 0;
END IF; SET llen = clen;
END WHILE;
RETURN 0;
END;
测试:
select INTE_ARRAY("1,3,5,9","8,2,3,7") as is_inte_array; -- 1
select INTE_ARRAY("电子信息,科技","电子信息科技,软件工程") as is_inte_array; -- 0
select INTE_ARRAY("电子信息,科技","电子信息") as is_inte_array; -- 1
select INTE_ARRAY("电子信息,科技","电子信息,科技") as is_inte_array; -- 1
-- 不应把单个逗号也算作交集
select INTE_ARRAY(",","电子信息,科技") as is_inte_array; -- 0
mysql判断两个字符串(以逗号分隔)是否存在交集的更多相关文章
- mysql 判断两个字符串是否存在包含关系-------(1,2,3)与(2,3)
1.这里这个是目前有问题的 #创建FUNCTION DELIMITER ; CREATE FUNCTION `is_mixed`(str1 TEXT, str2 TEXT) RETURN ...
- java中判断两个字符串是否相等的问题
我最近刚学java,今天编程的时候就遇到一个棘手的问题,就是关于判断两个字符串是否相等的问题.在编程中,通常比较两个字符串是否相同的表达式是“==”,但在java中不能这么写.在java中,用的是eq ...
- python利用difflib判断两个字符串的相似度
我们再工作中可能会遇到需要判断两个字符串有多少相似度的情况(比如抓取页面内容存入数据库,如果相似度大于70%则判定为同一片文章,则不录入数据库) 那这个时候,我们应该怎么判断呢? 不要着急,pytho ...
- Mysql判断是否某个字符串在某字符串字段的4种方法
方法一:like SELECT * FROM 表名 WHERE 字段名 like "%字符%"; 方法二:find_in_set() 利用mysql 字符串函数 find_in_s ...
- ✡ leetcode 161. One Edit Distance 判断两个字符串是否是一步变换 --------- java
Given two strings S and T, determine if they are both one edit distance apart. 给定两个字符串,判断他们是否是一步变换得到 ...
- leetcode-242 判断两个字符串是不是 Anagram ?
题目描述 假设给定两个字符串 s 和 t, 让我们写出一个方法来判断这两个字符串是否是字母异位词? 字母异位词就是,两个字符串中含有字母的个数和数量都一样,比如: Example 1: Input: ...
- [leetcode]242. Valid Anagram判断两个字符串是不是包含相同字符的重排列
/* 思路是判断26个字符在两个字符串中出现的次数是不是都一样,如果一样就返回true. 记住这个方法 */ if (s.length()!=t.length()) return false; int ...
- [google面试CTCI] 1-4.判断两个字符串是否由相同字符组成
[字符串与数组] Q:Write a method to decide if two strings are anagrams or not 题目:写一个算法来判断两个字符串是否为换位字符串.(换位字 ...
- mysql判断两个时间段是否有交集
//判断两个时间段是否有交集 private function checkTimeCross($start_time,$end_time){ $sql ) AND ((start_time > ...
- str_1.判断两个字符串每个字符出现的次数一样
1.两个字符串每个字符出现的次数一样 $str1 = "ab'c4*"; $str2 = "cb*'a4"; $ret = isBX($str1, $str2) ...
随机推荐
- nvm环境安装
目录 nvm是什么 使用背景 nvm的坑. nvm,node,npm之间的区别. nvm.nodejs.npm的关系: nvm-windows下载地址 安装 linux . mac 源码包下载地址 解 ...
- ruby 常用代码片段
# 文件的当前目录 puts __FILE__ # string.rb # 文件的当前行 puts __LINE__ # 6 #文件的当前目录 puts __dir__ #/media/haima/3 ...
- Table 实现固定行和固定列
需要用到的2个属性 table-layout : fixed position : sticky table-layout table-layout属性有两种特定值: auto(预设值)-表格的总宽度 ...
- 10分钟了解Flink SQL使用
Flink 是一个流处理和批处理统一的大数据框架,专门为高吞吐量和低延迟而设计.开发者可以使用SQL进行流批统一处理,大大简化了数据处理的复杂性.本文将介绍Flink SQL的基本原理.使用方法.流批 ...
- Java生成微信小程序码
官网文档地址:获取小程序码 package test; import com.alibaba.fastjson.JSONObject; import com.fasterxml.jackson.cor ...
- 超全、超简单Vue微信公众号授权登录指南
<template> <div id="app"> <h1>微信授权登陆</h1> <div> <div> ...
- 逆向WeChat(三)
本篇在博客园地址https://www.cnblogs.com/bbqzsl/p/18198572 上篇回顾,对象是WEUIEngine.WeUIEngine使用了chrome::base框架,但只用 ...
- .NET桌面程序混合开发之二:在原生WinFrom程序中使用WebView2
本文将介绍如何在WinForms中嵌入WebView2,并讲到WebView2的主要特征.点击了解更多WebView2的API. 1. 准备 Visual Studio 2017 及以上版本 WebV ...
- RTMP推流FLV插入自定义SEI数据总结
一.需求 在RTMP推送的流中添加一个接口,可以添加自定义的数据(一段字节数组). 经过分析,在H264的流中可以通过SEI添加自定义数据,下面是实施的总结 二.实施 1)准备工具 RTMP推流客户端 ...
- 基于WebSocket的modbus通信(一)- 服务器
ModbusTcp协议是基于tcp的,但不是说一定要通过tcp协议才能传输,只要能传输二进制的地方都可以.比如WebSocket协议. 但由于目前我只有tcp上面的modbus服务器实现,所以我必须先 ...