sql >> Database >  >> RDS >> Mysql

Hoe verwijder ik alle niet-alfanumerieke tekens uit een string in MySQL?

MySQL 8.0 of hoger gebruiken

Met dank aan michal.jakubeczy's antwoord hieronder, vervangen door Regex wordt nu ondersteund door MySQL:

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

MySQL 5.7 of lager gebruiken

Regex wordt hier niet ondersteund. Ik moest mijn eigen functie maken met de naam alphanum die de tekens voor mij verwijderde:

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 ; 

Nu kan ik het volgende doen:

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

en ik krijg:

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

Hoera!



  1. Hoe een externe sleutelbeperking in SQL te verwijderen?

  2. Hoe 2 datums in orakel af te trekken om het resultaat in uren en minuten te krijgen

  3. Zijn er nadelen aan het gebruik van een generieke varchar(255) voor alle op tekst gebaseerde velden?

  4. DATEDIFF() geeft verkeerde resultaten in SQL Server? Lees dit.