ホームページ > データベース > mysql チュートリアル > MySQL の文字列から英数字以外の文字を効率的に削除するにはどうすればよいですか?

MySQL の文字列から英数字以外の文字を効率的に削除するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-12-01 14:18:13
オリジナル
652 人が閲覧しました

How to Efficiently Remove Non-Alphanumeric Characters from Strings in MySQL?

MySQL の文字列から英数字以外の文字を効率的に削除する

MySQL では、文字列の比較はパフォーマンスを重視するタスクになる可能性があります。効率を最適化するには、比較を実行する前に英数字以外の文字を削除すると有益なことがよくあります。正規表現機能の利用やカスタム関数の作成など、これを達成するためのさまざまなアプローチを検討してみましょう。

MySQL 8.0 以降: Regex の利用

MySQL 8.0 以降のバージョンでは、 regex (正規表現) を使用して、英数字以外の文字を置き換えることができます。次の SQL ステートメントは、このアプローチを示しています。

UPDATE {table} SET {column} = REGEXP_REPLACE({column}, '[^0-9a-zÀ-ÿ ]', '')
ログイン後にコピー

このステートメントでは、正規表現 [^0-9a-zÀ-ÿ ] は、数字、文字、スペース、またはアクセント記号付き文字ではない任意の文字と一致します。

MySQL 5.7 以前: カスタムの作成Function

以前の MySQL バージョン (5.7 以下) では、正規表現機能は利用できません。代わりに、英数字以外の文字を削除するカスタム関数を作成できます。実装例を次に示します。

DROP FUNCTION IF EXISTS alphanum;
DELIMITER |
CREATE FUNCTION alphanum(str CHAR(255)) RETURNS CHAR(255) DETERMINISTIC
BEGIN
  DECLARE i, len SMALLINT DEFAULT 1;
  DECLARE ret CHAR(255) DEFAULT '';
  DECLARE c CHAR(1);
  IF str IS NOT NULL THEN
    SET len = CHAR_LENGTH(str);
    REPEAT
      BEGIN
        SET c = MID(str, i, 1);
        IF c REGEXP '[[:alnum:]]' THEN
          SET ret=CONCAT(ret,c);
        END IF;
        SET i = i + 1;
      END;
    UNTIL i > len END REPEAT;
  ELSE
    SET ret='';
  END IF;
  RETURN ret;
END |
DELIMITER ;
ログイン後にコピー

作成したら、この関数を使用して、以下に示すように英数字以外の文字を削除できます。

select 'This works finally!', alphanum('This works finally!');
ログイン後にコピー

以上がMySQL の文字列から英数字以外の文字を効率的に削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート