如何在mysql中添加levenshtein函数?

如何在mysql中添加levenshtein函数?我得到了levenshtein距离的代码,用于mysql格式“http://kristiannissen.wordpress.com/2010/07/08/mysql-levenshtein/”但是,如何在mysql中添加该函数?我正在使用xampp,我需要它在php中搜索。

摇曳的蔷薇
浏览 661回答 3
3回答

狐的传说

我已连接到我的MySQL服务器,只是在MySQL Workbench中执行此语句,它只是工作 - 我现在有了新的功能。levenshtein()例如,这可以按预期工作:SELECT levenshtein('abcde', 'abced')2

慕雪6442864

DELIMITER&nbsp;$$CREATE&nbsp;FUNCTION&nbsp;levenshtein(&nbsp;s1&nbsp;VARCHAR(255),&nbsp;s2&nbsp;VARCHAR(255)&nbsp;)&nbsp;RETURNS&nbsp;INT&nbsp; DETERMINISTIC&nbsp; BEGIN&nbsp;DECLARE&nbsp;s1_len,&nbsp;s2_len,&nbsp;i,&nbsp;j,&nbsp;c,&nbsp;c_temp,&nbsp;cost&nbsp;INT;&nbsp;DECLARE&nbsp;s1_char&nbsp;CHAR;&nbsp;--&nbsp;max&nbsp;strlen=255&nbsp;DECLARE&nbsp;cv0,&nbsp;cv1&nbsp;VARBINARY(256);&nbsp;SET&nbsp;s1_len&nbsp;=&nbsp;CHAR_LENGTH(s1),&nbsp;s2_len&nbsp;=&nbsp;CHAR_LENGTH(s2),&nbsp;cv1&nbsp;=&nbsp;0x00,&nbsp;j&nbsp;=&nbsp;1,&nbsp;i&nbsp;=&nbsp;1,&nbsp;c&nbsp;=&nbsp;0;&nbsp;IF&nbsp;s1&nbsp;=&nbsp;s2&nbsp;THEN&nbsp; &nbsp;&nbsp;RETURN&nbsp;0;&nbsp;ELSEIF&nbsp;s1_len&nbsp;=&nbsp;0&nbsp;THEN&nbsp; &nbsp;&nbsp;RETURN&nbsp;s2_len;&nbsp;ELSEIF&nbsp;s2_len&nbsp;=&nbsp;0&nbsp;THEN&nbsp; &nbsp;&nbsp;RETURN&nbsp;s1_len;&nbsp;ELSE&nbsp; &nbsp;&nbsp;WHILE&nbsp;j&nbsp;<=&nbsp;s2_len&nbsp;DO&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;SET&nbsp;cv1&nbsp;=&nbsp;CONCAT(cv1,&nbsp;UNHEX(HEX(j))),&nbsp;j&nbsp;=&nbsp;j&nbsp;+&nbsp;1;&nbsp; &nbsp;&nbsp;END&nbsp;WHILE;&nbsp; &nbsp;&nbsp;WHILE&nbsp;i&nbsp;<=&nbsp;s1_len&nbsp;DO&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;SET&nbsp;s1_char&nbsp;=&nbsp;SUBSTRING(s1,&nbsp;i,&nbsp;1),&nbsp;c&nbsp;=&nbsp;i,&nbsp;cv0&nbsp;=&nbsp;UNHEX(HEX(i)),&nbsp;j&nbsp;=&nbsp;1;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;WHILE&nbsp;j&nbsp;<=&nbsp;s2_len&nbsp;DO&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SET&nbsp;c&nbsp;=&nbsp;c&nbsp;+&nbsp;1;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF&nbsp;s1_char&nbsp;=&nbsp;SUBSTRING(s2,&nbsp;j,&nbsp;1)&nbsp;THEN&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SET&nbsp;cost&nbsp;=&nbsp;0;&nbsp;ELSE&nbsp;SET&nbsp;cost&nbsp;=&nbsp;1;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;END&nbsp;IF;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SET&nbsp;c_temp&nbsp;=&nbsp;CONV(HEX(SUBSTRING(cv1,&nbsp;j,&nbsp;1)),&nbsp;16,&nbsp;10)&nbsp;+&nbsp;cost;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF&nbsp;c&nbsp;>&nbsp;c_temp&nbsp;THEN&nbsp;SET&nbsp;c&nbsp;=&nbsp;c_temp;&nbsp;END&nbsp;IF;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SET&nbsp;c_temp&nbsp;=&nbsp;CONV(HEX(SUBSTRING(cv1,&nbsp;j+1,&nbsp;1)),&nbsp;16,&nbsp;10)&nbsp;+&nbsp;1;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF&nbsp;c&nbsp;>&nbsp;c_temp&nbsp;THEN&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SET&nbsp;c&nbsp;=&nbsp;c_temp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;END&nbsp;IF;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SET&nbsp;cv0&nbsp;=&nbsp;CONCAT(cv0,&nbsp;UNHEX(HEX(c))),&nbsp;j&nbsp;=&nbsp;j&nbsp;+&nbsp;1;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;END&nbsp;WHILE;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;SET&nbsp;cv1&nbsp;=&nbsp;cv0,&nbsp;i&nbsp;=&nbsp;i&nbsp;+&nbsp;1;&nbsp; &nbsp;&nbsp;END&nbsp;WHILE;&nbsp;END&nbsp;IF;&nbsp;RETURN&nbsp;c;&nbsp;END$$DELIMITER&nbsp;;

30秒到达战场

有问题的网页已经死了。顺便说一下,函数的创建代码在这里:DELIMITER&nbsp;$$CREATE&nbsp;FUNCTION&nbsp;levenshtein(&nbsp;s1&nbsp;varchar(255),&nbsp;s2&nbsp;varchar(255)&nbsp;)&nbsp;returns&nbsp;int&nbsp;deterministic&nbsp; BEGIN&nbsp; &nbsp;&nbsp;DECLARE&nbsp;s1_len,&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;s2_len,&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;i,&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;j,&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;c,&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;c_temp,&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;cost&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int;&nbsp; &nbsp;&nbsp;declare&nbsp;s1_char&nbsp;char;&nbsp; &nbsp;&nbsp;--&nbsp;max&nbsp;strlen=255&nbsp; &nbsp;&nbsp;declare&nbsp;cv0,&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;cv1&nbsp;varbinary(256);&nbsp; &nbsp;&nbsp;set&nbsp;s1_len&nbsp;=&nbsp;char_length(s1),&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;s2_len&nbsp;=&nbsp;char_length(s2),&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;cv1&nbsp;=&nbsp;0x00,&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;j&nbsp;=&nbsp;1,&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;=&nbsp;1,&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;=&nbsp;0;&nbsp; &nbsp;&nbsp;if&nbsp;s1&nbsp;=&nbsp;s2&nbsp;THEN&nbsp; &nbsp;&nbsp;RETURN&nbsp;0;&nbsp;elseif&nbsp;s1_len&nbsp;=&nbsp;0&nbsp;THEN&nbsp; &nbsp;&nbsp;RETURN&nbsp;s2_len;&nbsp;elseif&nbsp;s2_len&nbsp;=&nbsp;0&nbsp;THEN&nbsp; &nbsp;&nbsp;RETURN&nbsp;s1_len;&nbsp; &nbsp;&nbsp;else&nbsp; &nbsp;&nbsp;WHILE&nbsp;j&nbsp;<=&nbsp;s2_len&nbsp;do&nbsp; &nbsp;&nbsp;SET&nbsp;cv1&nbsp;=&nbsp;concat(cv1,&nbsp;unhex(hex(j))),&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;j&nbsp;=&nbsp;j&nbsp;+&nbsp;1;&nbsp;endWHILE;WHILE&nbsp;i&nbsp;<=&nbsp;s1_len&nbsp;do&nbsp; SET&nbsp;s1_char&nbsp;=&nbsp;substring(s1,&nbsp;i,&nbsp;1),&nbsp; &nbsp;&nbsp;c&nbsp;=&nbsp;i,&nbsp; &nbsp;&nbsp;cv0&nbsp;=&nbsp;unhex(hex(i)),&nbsp; &nbsp;&nbsp;j&nbsp;=&nbsp;1;WHILE&nbsp;j&nbsp;<=&nbsp;s2_len&nbsp;do&nbsp; SET&nbsp;c&nbsp;=&nbsp;c&nbsp;+&nbsp;1;IF&nbsp;s1_char&nbsp;=&nbsp;Substring(s2,&nbsp;j,&nbsp;1)&nbsp;then&nbsp;SET&nbsp;cost&nbsp;=&nbsp;0;&nbsp;else&nbsp;SET&nbsp;cost&nbsp;=&nbsp;1;ENDIF;SET&nbsp;c_temp&nbsp;=&nbsp;conv(hex(substring(cv1,&nbsp;j,&nbsp;1)),&nbsp;16,&nbsp;10)&nbsp;+&nbsp;cost;IF&nbsp;c&nbsp;>&nbsp;c_temp&nbsp;thenSET&nbsp;c&nbsp;=&nbsp;c_temp;ENDIF;SET&nbsp;c_temp&nbsp;=&nbsp;conv(hex(substring(cv1,&nbsp;j+1,&nbsp;1)),&nbsp;16,&nbsp;10)&nbsp;+&nbsp;1;IF&nbsp;c&nbsp;>&nbsp;c_temp&nbsp;thenSET&nbsp;c&nbsp;=&nbsp;c_temp;ENDIF;SET&nbsp;cv0&nbsp;=&nbsp;concat(cv0,&nbsp;unhex(hex(c))),&nbsp; &nbsp;&nbsp;j&nbsp;=&nbsp;j&nbsp;+&nbsp;1;ENDWHILE;SET&nbsp;cv1&nbsp;=&nbsp;cv0,&nbsp; &nbsp;&nbsp;i&nbsp;=&nbsp;i&nbsp;+&nbsp;1;ENDWHILE;ENDIF;RETURN&nbsp;c;END;DELIMITER&nbsp;;我希望它有助于一些身体!
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

MySQL