sql >> データベース >  >> RDS >> Mysql

mysqlの列の一部でsoundexを使用できますか?

    各単語を分割して、SOUNDEXを実行する必要があります 比較、これはまさに私があなたに話すつもりのこの関数がすることです。

    関数の使用

    使用例:SELECT p.name FROM products p WHERE soundex_match('fiftythree', p.name, ' ')

    3つの引数が必要です:

    • 針:探している単語
    • haysack:検索している単語の文字列
    • splitChar:文字列を単一の単語に分割する空白文字。通常はスペース(‘‘)

    干し草の山の中の単語が針に似ている場合、関数は1と0を返します。

    データベースに関数を作成する

    したがって、データベース(phpMyAdminまたはコマンドライン)に移動してこれを実行します。これを実行する必要があるのは1回だけです):

    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 /




    1. SQLServerでの監査トリガーの作成

    2. Railsはランダムなレコードを選択します

    3. SQLServerのセキュリティの熟考

    4. クロス集計クエリをAccessで通常のクエリに戻す方法