Mysql,REGEXP中的空格

时间:2013-09-26 17:46:11

标签: mysql regex function

我有一个问题。

我的这个功能除了一件事之外我还想要它,它还从字符串中删除空格,这是我不想要的。

我一直在尝试所有不同的提示和想法,但它不起作用。文档说我正确使用它,也许我误解了。有人可以帮助我吗?

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

2 个答案:

答案 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 .....并且它有效!