0

我有个问题。

我的这个功能可以满足我的所有需求,除了一件事,它还从字符串中删除了空格,这是我不想要的。

我一直在尝试从这里开始的所有不同的技巧和想法,但它不起作用。文档说我使用正确,也许我误解了。有人可以帮帮我吗?

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

4

2 回答 2

0

我无法在这里测试 UDF,但尝试将其设为 1 正则表达式,如下所示:

IF c REGEXP '[[:alpha:]]|[[:space:]]' THEN

您是否有可能处理非标准空间?像非换行空间?在这种情况下,也许这可以捕获所有空白:

IF c REGEXP '[[:alpha:]]|[[:blank:]]' THEN

或者,如果您只是想删除数字,如下所示:

IF c NOT REGEXP '[[:digit:]]' THEN
于 2013-09-26T18:45:29.993 回答
0

我在此页面上找到了解决方案: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 .....而且它有效!

于 2013-09-27T08:50:15.857 回答