2015-11-04 48 views
-3

我想写一个清理MySQL中的文本字符串的函数。它工作正常,但我不能让REGEXP留下的白色空间,目前的说法是MYSQL清理文本字符串保留字母字符和空格

IF c REGEXP '[A-Za-z]' THEN 

显然这是要拿出东西,那不是一个字母,但如何添加空白到列表?

我调整了另一篇文章的代码。全功能

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 '[A-Za-z]' THEN 
     SET ret=CONCAT(ret,c); 
     END IF; 
     SET i = i + 1; 
    END; 
    UNTIL i > len END REPEAT; 
    RETURN ret; 
END; 
+0

你试过'[:blank:]'? – Thamilan

+0

我将如何添加?我已经尝试过如果c REGEXP'[A-Za-z] | [:blank:]'那么还有IF c REGEXP'[A-Za-z:空白:'那么但是都不行? – user3789794

+0

你试过'[A-ZA-Z]'(最后有一个空白) –

回答

0

我发现问题是什么..我声明变量类型为CHAR。这不允许存储空白空间。

修改相应的功能,现在可以工作。

CREATE FUNCTION alphanum(str VARCHAR(100)) RETURNS VARCHAR(100) 
BEGIN 
    DECLARE i, len SMALLINT DEFAULT 1; 
    DECLARE ret VARCHAR(32) DEFAULT ''; 
    DECLARE c VARCHAR(1); 
    SET len = CHAR_LENGTH(str); 
    REPEAT 
    BEGIN 
     SET c = MID(str, i, 1); 
     IF c REGEXP '[A-Za-z ]' THEN 
     SET ret=CONCAT(ret,c); 
     END IF; 
     SET i = i + 1; 
    END; 
    UNTIL i > len END REPEAT; 
    RETURN ret; 
END; 
0

尝试这样的:

IF c REGEXP '[A-Za-z]+[[:space:]]+[A-Za-z]+' THEN 

IF c REGEXP '[A-Za-z]+[[:blank:]]+[A-Za-z]+' THEN 

此相匹配的话就像

A B 
A BB 
AA B 
AA BB 
... 

使用+ 1以上/ 使用*为0或更多

+0

我得到一个完全空白的字符串返回... – user3789794

相关问题