MySQL从字符串中删除除两个字符之外的所有字母数字字符

时间:2016-11-07 14:49:01

标签: mysql sql

我有这个功能来删除所有字母数字字符:

DROP FUNCTION IF EXISTS alphanum; 
DELIMITER | 
CREATE FUNCTION alphanum( str CHAR(32) ) RETURNS CHAR(16) 
BEGIN 
  DECLARE i, len SMALLINT DEFAULT 1; 
  DECLARE ret CHAR(32) DEFAULT ''; 
  DECLARE c CHAR(1); 
  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; 
  RETURN ret; 
END | 
DELIMITER ; 

如何修改它以允许这两个字符:[]

例如:

alphanum('hell;o [world] number8$')

将提供:hello[world]number8

2 个答案:

答案 0 :(得分:1)

变化:

 IF c REGEXP '[[:alnum:]]' THEN 

要:

 IF c REGEXP '[[:alnum:]\[\]]' THEN 

编辑:

我想我在MySQL documentation中从未注意到这一点:

  

要包含文字]字符,它必须紧跟在左括号[。

 IF c REGEXP '[\]\[[:alnum:]]' THEN 

我不确定反斜杠是否有必要,所以这可能有效:

 IF c REGEXP '[]\[[:alnum:]]' THEN 

或者:

 IF c REGEXP '[[.left-square-bracket.][.right-square-bracket.][:alnum:]]' THEN 

答案 1 :(得分:1)

只需更换此行

即可
IF c REGEXP '[[:alnum:]]' THEN 

(只允许使用字母和数字)

IF c REGEXP '[[:alnum:]]' OR c = '[' OR c = ']' THEN 

IF c REGEXP '[[:alnum:]]' OR c IN ('[', ']') THEN 

(您可以使用' ['和']')。