我正在尝试编写一个清除MySQL中的文本字符串的函数。它工作正常,但我不能让REGEXP留下空白。当前的声明是
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 :(得分: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或更多
答案 1 :(得分: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;