從MySQL 中的字符串中剝離非字母數字字符
問題:
比較字串時在MySQL 中,可以透過刪除所有非字母數字字元來提高效率。目前正在使用多個 REPLACE 函數,但正在尋求更有效率、更優雅的解決方案。
解決方案:
對於 MySQL 8.0 或更高版本:
MySQL現在支援正規表示式替換,可以使用單字刪除非字母數字字元語句:
UPDATE {table} SET {column} = REGEXP_REPLACE({column}, '[^0-9a-zÀ-ÿ ]', '')
對於MySQL 5.7 或更低版本:
正規表示式支援不可用。可以建立自訂函數「alphanum」來執行字元剝離:
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 ;
然後可以使用此函數從字串中剝離非字母數字字元:
select 'This works finally!', alphanum('This works finally!');
以上是如何有效地從 MySQL 字串中刪除非字母數字字元?的詳細內容。更多資訊請關注PHP中文網其他相關文章!