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,'\t',''),'\n',''),'\r',''));
      end if; 
                                  
      RETURN clean_string;
END
;;
DELIMITER ;

原文地址: http://devzone.co.in/mysql-function-to-remove-special-characters-accents-non-ascii-characters/

你可能感兴趣的:(Java,W,Java,Web)