2016-11-07 3 views
0

私はすべての英数字文字を削除するには、この機能を持っている以外の文字列からすべての英数字文字を削除:[]:どのように私はまた、これらの2つの文字を許可するように変更しますMySQLは2つの文字

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 

EDIT:

私は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 

( '[' と ']')。

関連する問題