一、函数实现原理

1.调用 LOCATE 函数 获得逗号出现的位置。

2.调用 SUBSTRING_INDEX 函数截取逗号前的字符串。

3.调用 SUBSTR 函数截取逗号后的字符串。

4.调用 REPLACE 和 LENGTH 函数的组合 统计逗号出现次数。

二、创建交集函数

-- ===== 删除函数
-- DROP FUNCTION IF EXISTS `FIND_IN_SET_INTERSECT`;
-- ===== 创建函数
CREATE FUNCTION `FIND_IN_SET_INTERSECT`(paramA text, paramB text) RETURNS INT
BEGIN-- =====================================
DECLARE currIdx INT DEFAULT 0;
DECLARE tmpStr text;
DECLARE currStr text; -- ===== 统计参数A 逗号出现的次数
DECLARE delimiterA INT DEFAULT 0;
-- ===== 统计参数B 逗号出现的次数
DECLARE delimiterB INT DEFAULT 0;
-- =====================================
SET currIdx = LOCATE(',', paramA);
-- ===== 如果 paramA 不包含 ','
IF currIdx = 0 THEN IF  FIND_IN_SET(paramA, paramB) > 0 THEN RETURN 1;ELSERETURN 0;END IF;
END IF;
-- =====================================
SET currIdx = LOCATE(',', paramB);
-- ===== 如果 paramB 不包含 ','
IF currIdx = 0 THEN IF  FIND_IN_SET(paramB, paramA) > 0 THEN RETURN 1;ELSERETURN 0;END IF;
END IF;
-- =====================================
-- ===== 统计参数A、参数B 逗号数
-- SET delimiterA = (LENGTH(paramA) - LENGTH(REPLACE (paramA, ',' , ''))) / LENGTH(',');
-- SET delimiterB = (LENGTH(paramB) - LENGTH(REPLACE (paramB, ',' , ''))) / LENGTH(',');
SET delimiterA = LENGTH(paramA) - LENGTH(REPLACE (paramA, ',' , ''));
SET delimiterB = LENGTH(paramB) - LENGTH(REPLACE (paramB, ',' , ''));-- ===== 交换参数值 减少循环次数
IF delimiterA > delimiterB THEN SET tmpStr = paramA;SET paramA = paramB;SET paramB = tmpStr;
END IF;SET currStr = paramA;
SET currIdx = LOCATE(',', currStr);WHILE currIdx > 0 DOSET tmpStr = SUBSTRING_INDEX(currStr, ',', 1);SET currStr = SUBSTR(currStr, currIdx + 1);IF FIND_IN_SET(tmpStr, paramB) > 0 THEN RETURN 1;END IF;SET currIdx = LOCATE(',',currStr);
END WHILE;IF FIND_IN_SET(currStr, paramB) > 0 THENRETURN 1;
END IF;RETURN 0;END;

三、函数调用

SELECT FIND_IN_SET_INTERSECT('1', '1,2,3') AS `HAS_INTERSECT`;               -- > 1
SELECT FIND_IN_SET_INTERSECT('1,2,3', '0,13') AS `HAS_INTERSECT`;            -- > 0
SELECT FIND_IN_SET_INTERSECT('1,2,3', '2') AS `HAS_INTERSECT`;               -- > 1
SELECT FIND_IN_SET_INTERSECT('1,2,3,4,5,6,7,8', '8,9') AS `HAS_INTERSECT`;   -- > 1

MySQL 交集查询函数实现相关推荐

  1. mysql 自定义查询函数,mysql自定义函数与动态查询

    摘要 腾兴网为您分享:mysql自定义函数与动态查询,智学网,夜读小说,小睡眠,西餐菜谱等软件知识,以及猫语翻译器,江西校讯通,刷qq业务的网站,房洽洽,学士服照,爱站seo工具包,虚拟声卡驱动,隐藏 ...

  2. MYSQL常用查询函数

    文章目录 常见函数: 数学函数: 日期函数: 其他函数: 流程控制函数: CASE函数 case 函数的使用二:类似于 多重if 概念:类似于java的方法,将一组逻辑语句封装在方法体中,对外暴露方法 ...

  3. mysql怎么查询函数用法_MYSQL 查询重要函数

    mysql 查询的重要函数 今天在做前台的同事反映,列表能查到的数据,以列表中的数据为条件,去查询却不能显示数据! sql语句是这样: select * from location  where   ...

  4. mysql+时间查询函数_mysql时间查询函数实例

    会员表,有个birthday字段,值为'YYYY-MM-DD'格式,现在要查询一个时间段内过生日的会员,比如'06-03'到'07-08'这个时间段内所有过生日的会员. SQL语句: Select * ...

  5. php mysql 时间戳查询_mysql中时间查询函数(包括时间戳)

    mysql中时间查询函数(包括时间戳) 这些函数都是MySQL自带的,可以直接使用在PHP写的MySQL查询语句中哦 1-CURDATE()或CURRENT_DATE()和CURTIME()或CURR ...

  6. MySQL in 查询,并通过 FIELD 函数按照查询条件顺序返回结果

    我们都非常习惯通过 MySQL 的 IN 函数来查询特定集合的数据,比如为了在 books 表中找出李雷.韩梅梅和安华写的书,我们可以有如下的 SQL(可以通过 SQL Fiddle查看示例): SE ...

  7. mysql的空间查询函数_MYSQL空间查询函数

    数据写入 插入时使用ST_GeomFromText,也可使用GeomFromText INSERT INTOt_customers ( lon_lat_point )VALUES( GeomFromT ...

  8. mysql 空间查询_MYSQL空间查询函数

    数据写入 插入时使用ST_GeomFromText,也可使用GeomFromText INSERT INTOt_customers ( lon_lat_point )VALUES( GeomFromT ...

  9. mysql数据库in函数查询是否走索引

    mysql数据库in函数查询是否走索引? IN 通常是走索引的,当IN后面的数据在数据表中超过30%的匹配时是全表的扫描,不会走索引,因此IN走不走索引与后面的数据量有关系! 昨天恰好在工作中遇到了这 ...

最新文章

  1. 架构之道(4) - 最後的最後,让大家都知道自己在做什麽
  2. 十 mybatis逆向工程
  3. 《Python从小白到大牛》简介
  4. Leetcode刷题(3)整数反转
  5. 《Python编程从入门到实践》记录之Python函数定义、使用
  6. 阿里云泄露 40 家名企源代码!
  7. jQuery入门笔记
  8. mapinfo professional 学习资料
  9. java websocket ie8_解决WebSocket兼容ie浏览器版本问题
  10. 【公益译文】网络威胁信息共享指南
  11. 手机无限重启可能跟电压不稳有关
  12. 【电路】电容(一)——浅析大小电容的高低频滤波、并联问题
  13. Mendix一练一动: Mendix Studio Pro连接外围数据库(SQL Server)实现增删改查
  14. java后端中GET 和 POST 底层原理,深入了解一下
  15. Windows10系统盘清理实用攻略
  16. Til the Cows Come Home(简单的最短路)
  17. 运行gitbook init命令报错及问题解决办法 TypeError [ERR_INVALID_ARG_TYPE]: The “data“ argument must be of type stri
  18. windows7经典开机音乐_极简之美——网易云音乐云石蓝牙音箱 拆机评测
  19. 行云集团独家冠名纪录片《风从东风来》,讲述中国品牌故事
  20. 子墨庖丁Android的ActionBar源码分析 (一)实例化

热门文章

  1. RocketMQ源码解析:同步刷盘和异步刷盘的实现
  2. grep 正则表达式 匹配url
  3. 360和腾讯,一群流氓
  4. 项目实战:仿QQ的QQ简洁版2019群聊项目
  5. vue 点赞 点爱心 代码
  6. linux文件编辑器的三种模式,Linux中文本编辑器三种工作模式切换及vi编辑器三种工作模式下命令详解...
  7. 【三国演义】——司马懿
  8. Snake Rana (容斥定理)
  9. 怎么在电脑上阅读txt小说,小说阅读器推荐
  10. 文具用品分类html,文具分类.doc