Mysql
 sql >> Base de données >  >> RDS >> Mysql

soundex peut-il être utilisé sur une partie d'une colonne dans mysql?

Vous devrez décomposer chaque mot et faire le SOUNDEX comparaison, ce qui est exactement ce que fait cette fonction dont je vais vous parler.

Utiliser la fonction

Exemple d'utilisation :SELECT p.name FROM products p WHERE soundex_match('fiftythree', p.name, ' ')

Il prend 3 arguments :

  • aiguille :le mot que vous recherchez
  • haysack :la chaîne de mots parmi lesquels vous recherchez
  • splitChar :le caractère d'espacement qui divisera la chaîne en un seul mot. Généralement c'est l'espace(‘ ‘)

Si un mot dans haystack ressemble à aiguille, la fonction renverra 1 et 0 sinon.

Création de la fonction dans votre base de données

Allez donc dans votre base de données (phpMyAdmin ou la ligne de commande) et exécutez ceci, vous n'avez qu'à le faire une fois) :

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/