Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak usunąć wszystkie znaki niealfanumeryczne z ciągu w MySQL?

Korzystanie z MySQL 8.0 lub nowszego

Dzięki uprzejmości poniższej odpowiedzi michal.jakubeczy, zastąpienie przez Regex jest teraz obsługiwane przez MySQL:

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

Korzystanie z MySQL w wersji 5.7 lub starszej

Regex nie jest tutaj obsługiwany. Musiałem stworzyć własną funkcję o nazwie alfanum, która usuwała dla mnie znaki:

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 ; 

Teraz mogę zrobić:

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

i otrzymuję:

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

Hurra!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kolumna zmiany nazwy MySQL

  2. Jak zaktualizować MySQL 5.5 do 5.6 na Ubuntu 14.04

  3. Hibernacja:Automatyczne tworzenie/aktualizowanie tabel db na podstawie klas jednostek

  4. MySQL – Poczekaj kilka sekund za pomocą SELECT SLEEP()

  5. MySQL:najszybszy sposób liczenia wierszy