Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie entferne ich alle nicht alphanumerischen Zeichen aus einer Zeichenfolge in MySQL?

Mit MySQL 8.0 oder höher

Mit freundlicher Genehmigung von michal.jakubeczys Antwort unten wird das Ersetzen durch Regex jetzt von MySQL unterstützt:

UPDATE {table} SET {column} = REGEXP_REPLACE({column}, '[^0-9a-zA-Z ]', '')

Mit MySQL 5.7 oder niedriger

Regex wird hier nicht unterstützt. Ich musste meine eigene Funktion namens alphanum erstellen, die die Zeichen für mich entfernte:

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 ; 

Jetzt kann ich:

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

und ich bekomme:

+---------------------+---------------------------------+
| This works finally! | alphanum('This works finally!') |
+---------------------+---------------------------------+
| This works finally! | Thisworksfinally                |
+---------------------+---------------------------------+
1 row in set (0.00 sec)

Hurra!