我有一个问题。
我的这个功能除了一件事之外我还想要它,它还从字符串中删除空格,这是我不想要的。
我一直在尝试所有不同的提示和想法,但它不起作用。文档说我正确使用它,也许我误解了。有人可以帮助我吗?
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:]]')应该在我的眼中将char附加到最后一个字符串,但它没有。
我也试过'','[]'等等,没有成功。
我正在使用mysql 5.6版。我使用了这个文档:http://dev.mysql.com/doc/refman/5.6/en/regexp.html
答案 0 :(得分:0)
我无法在这里测试UDF,但尝试将其设为1 regexp:
IF c REGEXP '[[:alpha:]]|[[:space:]]' THEN
您是否有可能处理非标准空间?像非破线空间?在这种情况下,也许这可以捕获所有的空白区域:
IF c REGEXP '[[:alpha:]]|[[:blank:]]' THEN
或者,如果您只是想删除数字,请执行以下操作:
IF c NOT REGEXP '[[:digit:]]' THEN
答案 1 :(得分:0)
我在此页面上找到了solutino:MySQL REGEXP - Removing white space and non-numeric characters
CREATE DEFINER=`user`@`localhost` FUNCTION `fn_RemoveNumerics`(str VARCHAR(1000)) RETURNS varchar(1000) CHARSET latin1
BEGIN
DECLARE counter INT DEFAULT 0;
DECLARE strLength INT DEFAULT 0;
DECLARE strChar VARCHAR(1000) DEFAULT '' ;
DECLARE retVal VARCHAR(1000) DEFAULT '';
SET strLength = LENGTH(str);
WHILE strLength > 0 DO
SET counter = counter+1;
SET strChar = SUBSTRING(str,counter,1);
IF strChar REGEXP('[0-9]+') = 0
THEN SET retVal = CONCAT(retVal,strChar);
END IF;
SET strLength = strLength -1;
SET strChar = NULL;
END WHILE;
RETURN retVal;
END
我只是将'IF strChar REGEXP('[0-9] +')= 1'更改为'IF strChar REGEXP('[0-9] +')= 0'
我仍然无法弄清楚它为什么不起作用。也许它对转发器有什么作用?这个使用一段时间来获得工作don3e .....并且它有效!