sql >> Database teknologi >  >> RDS >> Mysql

Hvordan fjerner man alle ikke-alfanumeriske tegn fra en streng i MySQL?

Brug af MySQL 8.0 eller nyere

Udlånt af michal.jakubeczys svar nedenfor, er erstatning af Regex nu understøttet af MySQL:

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

Bruger MySQL 5.7 eller lavere

Regex understøttes ikke her. Jeg var nødt til at oprette min egen funktion kaldet alphanum, som fjernede tegnene for mig:

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 jeg gøre:

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

og jeg får:

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

Hurra!



  1. MariaDB UCASE() Forklaret

  2. SQL mellem operatør

  3. Installer og opret forbindelse til PostgreSQL 10 på Ubuntu 16.04

  4. Sådan indstilles en standardværdi for en eksisterende kolonne