MySQL 字符串中的高效字符过滤
在比较字符串以提高效率时,消除非字母数字字符至关重要。不要使用多个 REPLACE 函数,而是考虑使用替代解决方案。
MySQL 8.0 及以上
MySQL 8.0 支持正则表达式替换,允许您将非字母数字字符替换为空字符串:
UPDATE {table} SET {column} = REGEXP_REPLACE({column}, '[^0-9a-zÀ-ÿ ]', '')
MySQL 5.7 和下面
由于MySQL 5.7不支持正则表达式,您可以创建一个自定义函数,如下所示:
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!');
输出:
+---------------------+---------------------------------+ | This works finally! | alphanum('This works finally!') | +---------------------+---------------------------------+ | This works finally! | Thisworksfinally | +---------------------+---------------------------------+
以上是如何高效过滤MySQL字符串中的非字母数字字符?的详细内容。更多信息请关注PHP中文网其他相关文章!