从 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中文网其他相关文章!