zoukankan      html  css  js  c++  java
  • mysql判断两个逗号分隔字符串是否有交集

      在网上找了一些,多多少少都有点问题,这里记录一下我修改后的代码:  

    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("8,9","8,22,33,7") as is_inte_array;
    -- 返回1
    select INTE_ARRAY("1,9","8,22,33,7") as is_inte_array;
    -- 返回0
    select INTE_ARRAY(",","8,22,33,7") as is_inte_array;
    -- 返回0(很多网上提供的解决方案没有考虑到这种情况)
  • 相关阅读:
    60. 搜索插入位置
    62. 搜索旋转排序数组
    101. 删除排序数组中的重复数字 II
    397. 最长上升连续子序列
    172. 删除元素
    31. 数组划分
    100. 删除排序数组中的重复数字
    407. 加一
    412. 分糖果
    14. 二分查找
  • 原文地址:https://www.cnblogs.com/tranquillity/p/9525176.html
Copyright © 2011-2022 走看看