我有一个问题。
我的这个函数完成了我想要的一切,除了一件事,它还删除了字符串中的空格,这是我不想要的。
我一直在尝试这里的所有不同的技巧和想法,但它不起作用。文档说我使用它是正确的,也许我误解了。有人可以帮我吗?
CREATE DEFINER=`user`@`%` FUNCTION `fn_RemoveNumbers`(str varchar(8000)) RETURNS varchar(767) CHARSET latin1
BEGIN
DECLARE i, len SMALLINT DEFAULT 1;
DECLARE ret varchar(767) DEFAULT '';
DECLARE c CHAR(1);
SET len = CHAR_LENGTH( str );
REPEAT
BEGIN
SET c = MID( str, i, 1 );
IF (c REGEXP '[[:alpha:]]') OR (c REGEXP '[[:space:]]') THEN
SET ret=CONCAT(ret,c);
END IF;
SET i = i + 1;
END;
UNTIL i > len END REPEAT;
RETURN ret;
END
在我看来, (c REGEXP '[[:space:]]') 应该将字符附加到最终字符串,但事实并非如此。
我也尝试过“”、“[ ]”等,但没有成功。
我使用的是 mysql 版本 5.6。我使用了这个文档:http://dev.mysql.com/doc/refman/5.6/en/regexp.html
最佳答案
我无法在这里测试 UDF,但尝试将其设为 1 正则表达式,如下所示:
IF c REGEXP '[[:alpha:]]|[[:space:]]' THEN
您是否可能正在处理非标准空间?喜欢非换行空格吗?在这种情况下,也许这可以捕获所有空白:
IF c REGEXP '[[:alpha:]]|[[:blank:]]' THEN
或者,如果您只是想删除数字,如下所示:
IF c NOT REGEXP '[[:digit:]]' THEN
关于Mysql,REGEXP 中的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19035084/