自定义函数 判断按指定字符分割后的两个字符串集合是否有交集【MySQL】

  • 功能介绍
    字符串A:'aaa,bbb,ccc'
    字符串B:'vvv,uuu,ccc,ttt'
    按“,”分割开后两个字符集合间的交集是'ccc'
    如果有交集,函数返回值为1(true)

  • 相关函数

SET GLOBAL log_bin_trust_function_creators = 1;

CREATE  FUNCTION `func_get_split_string_total`(	x varchar(1000),y varchar(5))
	
	  RETURNS int(11)
		BEGIN
		 return 1+(length(x) - length(replace(x,y,'')));
		END;
		
		
CREATE  FUNCTION `func_get_split_string`(	x varchar(1000),y varchar(5),z int)
  RETURNS varchar(255) CHARSET utf8
	BEGIN

	 declare result varchar(255) default '';
	 set result = reverse(substring_index(reverse(substring_index(x,y,z)),y,1));
	 return result;
	END;
	
	
CREATE FUNCTION func_compare(x VARCHAR(2000),y VARCHAR(2000),z VARCHAR(5))
RETURNS int
BEGIN
	  DECLARE  count_1 INT DEFAULT 0;
		DECLARE  count_2 INT DEFAULT 0;
    DECLARE  num_1  INT DEFAULT 1;
    DECLARE  num_2  INT DEFAULT 1;
		DECLARE  _val  INT DEFAULT 0;
		set count_1=func_get_split_string_total(x,z);
		set count_2=func_get_split_string_total(y,z);
		
		loop1:WHILE (num_1-1)<count_1 Do 
		 loop2:WHILE (num_2-1)<count_2 Do 
		  if func_get_split_string(x,z,num_1)=func_get_split_string(y,z,num_2)
		     THEN	set _val=1;
		     RETURN _val;
		  END if;
			set num_2=num_2+1;		
			END WHILE loop2;
		   set num_2=0;    
		   set num_1=num_1+1;			 
		   END WHILE loop1;
		   RETURN _val;
END;

  • 测试及其结果
    SELECT func_compare('aaa,bbb,ccc','vvv,uuu,ccc,ttt',',')
    image
posted @ 2022-04-14 19:08  BObO-B0BO  阅读(329)  评论(0)    收藏  举报