# 自定义函数-逗号分隔字符串之间的包含关系
DROP FUNCTION IF EXISTS `IN_SET`;
DELIMITER //
-- 集合包含关系检查函数
-- @param text setA A 集合 如 "ES3048RL,K7305,K8773,K9231,K9233"
-- @param text setB B 集合 如 "ES3048RL,K7305,K8773,K9231"
-- @return int(1) B 集合内所有单元在 A 集合 内都存在则返回 1 否则返回 0
CREATE FUNCTION `IN_SET` (setA TEXT,setB TEXT) RETURNS INT(1)
BEGIN
DECLARE rtval INT DEFAULT 0 ; -- RETURN 结果
DECLARE idx INT DEFAULT 0 ; -- B 集合单元索引
DECLARE len INT DEFAULT 0;-- B 集合表达式长度
DECLARE llen INT DEFAULT 0;-- 最后检查位置
DECLARE clen INT DEFAULT 0;-- 当前检查位置
DECLARE tmpStr TEXT;-- 临时检查数据集
DECLARE curt TEXT;-- B 当前检查的单元
DECLARE debugStr TEXT;-- 调试数据
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 LENGTH(curt) > 0 THEN
IF FIND_IN_SET(curt,setA) > 0 THEN SET rtval=1;
ELSE RETURN 0;
END IF;
END IF;
SET llen = clen;
END WHILE;
RETURN rtval;
END;
//
DELIMITER ;
SELECT IN_SET("ES3048RL,K7305,K8773,K9231,K9233","ES3048RL,K7305,K8773,K9231") AS IS_IN_SET;
Mysql 存储过程之函数-如判断两个以逗号分隔字符串的包含关系
最新推荐文章于 2021-12-26 17:56:56 发布