select * from xx表名 where sfn_GetSimilar_Rate(值1,值2);
目前支持64字符,如果需要更大字符请自行更改,测试过程如果文字过长,可能速度会点慢。如果需要更高效率建议使用搜索引擎或者其他方法
-- --------------------------------------------------------------------------------
-- 计算两个中文字符串的相似度
-- --------------------------------------------------------------------------------
DELIMITER $$
CREATE DEFINER = CURRENT_USER FUNCTION `sfn_GetSimilar_Rate`(s1 VARCHAR(64),s2 VARCHAR(64)) RETURNS float
BEGIN
declare l1 int default 0;
declare l2 int default 0;
declare i int default 0;
declare _ss varchar(2) ;
declare j int default 0;
declare sum int default 0;
set l1=CHAR_LENGTH(s1);
set l2=CHAR_LENGTH(S2);
IF l1=0 THEN RETURN 0;
END IF;
IF l2=0 THEN RETURN 0;
END IF;
SET i=0;
set sum=0;
myloop1:LOOP
SET i=i+1;
IF i>l1 THEN LEAVE myloop1;
end if;
SET _ss=substr(s1,i,1);
SET j=0;
myloop2:LOOP
set j=j+1;
if j>l2 then
LEAVE myloop2;
end if;
if _ss=substr(s2,j,1) then
set sum=sum+1;
end if;
END LOOP myloop2;
END LOOP myloop1;
RETURN sum/l2;
END