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(很多网上提供的解决方案没有考虑到这种情况)
  • 相关阅读:
    bzoj1059: [ZJOI2007]矩阵游戏
    NEW
    bzoj2438: [中山市选2011]杀人游戏
    bzoj4554: [Tjoi2016&Heoi2016]游戏 二分图匹配
    【高精度】模板 (C++)
    【BZOJ4025】二分图 LCT
    读入/输出模板
    一些 Markdown 语法
    题解 P3732 [HAOI2017]供给侧改革
    题解 CF1598A Computer Game
  • 原文地址:https://www.cnblogs.com/tranquillity/p/9525176.html
Copyright © 2011-2022 走看看