MySQL自定义函数来删除特殊字符或非ASCII字符
本章MySQL教程,UncleToo给大家介绍一个MySQL的自定义函数,使用它我们可以很方便的清理数据表中的特殊字符或非ASCII字符。同时还可以通过参数来去除指定内容,如是否去掉字母,是否去掉数字,是否去掉空格、制表符等等。
函数用法:
stripSpeciaChars ( string , allow_space , allow_number , allow_alphabets , no_trim ) ;
各参数含义:
-
string:要清理的字符串/字段
-
allow_space:是否去除空格,默认值0,
-
allow_number:是否去除数字,默认值0,
-
allow_alphabets:是否去除字母,默认值1,
-
no_trim:是否去除空格、制表符,默认值1。
用法示例:
1、删除数字
SELECT stripSpeciaChars("Uncle520*&Too",0,0,1,0);
结果:UncleToo
2、删除字母
SELECT stripSpeciaChars("Uncle520*&Too",0,1,0,0);
结果:520
3、删除数字,不删除空格
SELECT stripSpeciaChars("Uncle5ÒÓÔÕÖØÙÚàáâã 20*&TÄÅÆÇÈÉÊoo",1,0,1,1);
结果:Uncle Too
这个函数很功能很强大吧,下面是函数的代码,大家只要在数据库中执行一下就可以了:
DROP FUNCTION IF EXISTS `stripSpeciaChars`; DELIMITER ;; CREATE FUNCTION `stripSpeciaChars`(`dirty_string` varchar(2048),allow_space TINYINT,allow_number TINYINT,allow_alphabets TINYINT,no_trim TINYINT) RETURNS varchar(2048) CHARSET utf8 BEGIN /** * MySQL function to remove Special characters, Non-ASCII,hidden characters leads to spaces, accents etc * Downloaded from http://www.uncletoo.com */ DECLARE clean_string VARCHAR(2048) DEFAULT ""; DECLARE c VARCHAR(2048) DEFAULT ""; DECLARE counter INT DEFAULT 1; DECLARE has_space TINYINT DEFAULT 0; -- let spaces in result string DECLARE chk_cse TINYINT DEFAULT 0; DECLARE adv_trim TINYINT DEFAULT 1; -- trim extra spaces along with hidden characters, new line characters etc. if allow_number=0 and allow_alphabets=0 then RETURN NULL; elseif allow_number=1 and allow_alphabets=0 then set chk_cse =1; elseif allow_number=0 and allow_alphabets=1 then set chk_cse =2; end if; if allow_space=1 then set has_space =1; end if; if no_trim=1 then set adv_trim =0; end if; IF ISNULL(dirty_string) THEN RETURN NULL; ELSE CASE chk_cse WHEN 1 THEN -- return only Numbers in result WHILE counter <= LENGTH(dirty_string) DO SET c = MID(dirty_string, counter, 1); IF ASCII(c) = 32 OR ASCII(c) >= 48 AND ASCII(c) <= 57 THEN SET clean_string = CONCAT(clean_string, c); END IF; SET counter = counter + 1; END WHILE; WHEN 2 THEN -- return only Alphabets in result WHILE counter <= LENGTH(dirty_string) DO SET c = MID(dirty_string, counter, 1); IF ASCII(c) = 32 OR ASCII(c) >= 65 AND ASCII(c) <= 90 OR ASCII(c) >= 97 AND ASCII(c) <= 122 THEN SET clean_string = CONCAT(clean_string, c); END IF; SET counter = counter + 1; END WHILE; ELSE -- return numbers and Alphabets in result WHILE counter <= LENGTH(dirty_string) DO SET c = MID(dirty_string, counter, 1); IF ASCII(c) = 32 OR ASCII(c) >= 48 AND ASCII(c) <= 57 OR ASCII(c) >= 65 AND ASCII(c) <= 90 OR ASCII(c) >= 97 AND ASCII(c) <= 122 THEN SET clean_string = CONCAT(clean_string, c); END IF; SET counter = counter + 1; END WHILE; END CASE; END IF; -- remove spaces from result if has_space=0 then SET clean_string =REPLACE(clean_string," ",""); end if; -- remove extra spaces, newline,tabs. from result if adv_trim=1 then SET clean_string =TRIM(Replace(Replace(Replace(clean_string," ","")," ","")," ","")); end if; RETURN clean_string; END ;; DELIMITER ;
原文地址:http://devzone.co.in/mysql-function-to-remove-special-characters-accents-non-ascii-characters/
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇:没有了
- 下一篇:没有了