Maison >base de données >tutoriel mysql >Comment supprimer efficacement les caractères non alphanumériques des chaînes dans MySQL ?

Comment supprimer efficacement les caractères non alphanumériques des chaînes dans MySQL ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-01 14:18:13667parcourir

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

Supprimer efficacement les caractères non alphanumériques des chaînes dans MySQL

Dans MySQL, comparer des chaînes peut être une tâche gourmande en performances. Pour optimiser l'efficacité, il est souvent avantageux de supprimer les caractères non alphanumériques avant d'effectuer la comparaison. Explorons différentes approches pour y parvenir, notamment en tirant parti de la fonctionnalité regex et en créant une fonction personnalisée.

MySQL 8.0 et versions ultérieures : utilisation de Regex

Avec MySQL 8.0 ou versions ultérieures, vous pouvez utiliser des expressions régulières (expressions régulières) pour remplacer les caractères non alphanumériques. L'instruction SQL suivante illustre cette approche :

UPDATE {table} SET {column} = REGEXP_REPLACE({column}, '[^0-9a-zÀ-ÿ ]', '')

Dans cette instruction, l'expression régulière [^0-9a-zÀ-ÿ ] correspond à tout caractère qui n'est pas un chiffre, une lettre, un espace ou un caractère accentué.

MySQL 5.7 et versions antérieures : création d'une fonction personnalisée

Pour les versions MySQL antérieures (5.7 ou version inférieure), la fonctionnalité regex n'est pas disponible. Comme alternative, vous pouvez créer une fonction personnalisée qui supprime les caractères non alphanumériques. Voici un exemple d'implémentation :

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 ;

Une fois créée, vous pouvez utiliser cette fonction pour supprimer les caractères non alphanumériques, comme indiqué ci-dessous :

select 'This works finally!', alphanum('This works finally!');

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn