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(很多网上提供的解决方案没有考虑到这种情况)
  • 相关阅读:
    二维树状数组(模板)
    3033太鼓达人
    2503相框
    Ant Trip(画几笔)
    [ZJOI2004]嗅探器
    [USACO06JAN]冗余路径Redundant Paths(缩点)
    P3806 【模板】点分治1
    P4149 [IOI2011]Race
    P2634 [国家集训队]聪聪可可
    P4178 Tree
  • 原文地址:https://www.cnblogs.com/tranquillity/p/9525176.html
Copyright © 2011-2022 走看看