Suppression des caractères non alphanumériques des chaînes dans MySQL
Problème :
Lors de la comparaison de chaînes dans MySQL, l'efficacité peut être améliorée en supprimant tous les caractères non alphanumériques. Actuellement, plusieurs fonctions REPLACE sont utilisées, mais une solution plus efficace et plus élégante est recherchée.
Solution :
Pour MySQL 8.0 ou supérieur :
MySQL prend désormais en charge le remplacement Regex, ce qui permet de supprimer les caractères non alphanumériques avec un seul déclaration :
UPDATE {table} SET {column} = REGEXP_REPLACE({column}, '[^0-9a-zÀ-ÿ ]', '')
Pour MySQL 5.7 ou version antérieure :
La prise en charge des expressions régulières n'est pas disponible. Une fonction personnalisée, « alphanum », peut être créée pour effectuer la suppression des caractères :
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 ;
Cette fonction peut ensuite être utilisée pour supprimer les caractères non alphanumériques des chaînes :
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!