Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Kann Soundex für einen Teil einer Spalte in MySQL verwendet werden?

Sie müssen jedes Wort auflösen und den SOUNDEX durchführen Vergleich, und genau das macht diese Funktion, von der ich Ihnen erzählen werde.

Verwendung der Funktion

Verwendungsbeispiel:SELECT p.name FROM products p WHERE soundex_match('fiftythree', p.name, ' ')

Es braucht 3 Argumente:

  • Nadel:Das gesuchte Wort
  • Heusack:Die Wortfolge, in der Sie suchen
  • splitChar:Das Leerzeichen, das den String in einzelne Wörter aufteilt. Im Allgemeinen ist es das Leerzeichen (‘ ‘)

Wenn irgendein Wort in Heuhaufen ähnlich wie Nadel klingt, gibt die Funktion andernfalls 1 und 0 zurück.

Funktion in Ihrer Datenbank erstellen

Gehen Sie also in Ihre Datenbank (phpMyAdmin oder die Befehlszeile) und führen Sie dies aus, Sie müssen es nur dieses eine Mal tun:

drop function if exists soundex_match;
delimiter $$
create function soundex_match (needle varchar(128), haystack text, splitChar varchar(1)) returns tinyint
  deterministic
  begin
    declare spacePos int;
    declare searchLen int default length(haystack);
    declare curWord varchar(128) default '';
    declare tempStr text default haystack;
    declare tmp text default '';
    declare soundx1 varchar(64) default soundex(needle);
    declare soundx2 varchar(64) default '';

    set spacePos = locate(splitChar, tempStr);

    while searchLen > 0 do
      if spacePos = 0 then
        set tmp = tempStr;
        select soundex(tmp) into soundx2;
        if soundx1 = soundx2 then
          return 1;
        else
          return 0;
        end if;
      end if;

      if spacePos != 0 then
        set tmp = substr(tempStr, 1, spacePos-1);
        set soundx2 = soundex(tmp);
        if soundx1 = soundx2 then
          return 1;
        end if;
        set tempStr = substr(tempStr, spacePos+1);
        set searchLen = length(tempStr);
      end if;

      set spacePos = locate(splitChar, tempStr);

    end while;

    return 0;

  end
$$
delimiter ;

http://www.imranulhoque.com/ mysql/mysql-function-soundex-match-multi-word-string/