2016-11-07 71 views
0

我有此功能來消除所有字母數字字符:的MySQL刪除字符串中的所有字母數字字符但有兩個字符

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

回答

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 
+0

它不會返回任何...空字符串。 – avi

+0

@avi。 。 。顯然這是(另一個)與「常規」正則表達式的區別。 MySQL確實有辦法解決它。 –

1

只需更換這行

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

(wh ERE你只允許字母和數字),與

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

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

(你在哪裏,也罰款 '[' 和 ']')。

相關問題