从MySQL SELECT中删除数字

时间:2013-01-02 13:35:08

标签: mysql string select

我需要从SELECT查询中的名称字段中删除数字。这些数字可能位于字符串的末尾。例子如下:

Some Name
Namewithnospace
NamewithInt 100   <--- I want to remove this int from the string

我不能保证字符串的第一部分不会包含空格,尽管我可以相当确定该数字是字符串的最后一部分。此外,大多数数据都没有空间。

我可以看到必须有一个使用REVERSE()SUBSTRING()的解决方案,但无法解决如何不破坏没有空格的数据,或者那些有空格但没有空格的数据整数。

编辑:下面是Ollie向我指出的MySQL C函数的定义,我对regexp进行了更改(在函数的输出中包含空格和标点符号):

DELIMITER !

DROP FUNCTION IF EXISTS alphas! 

CREATE FUNCTION alphas ( str VARCHAR(255) ) 
               RETURNS VARCHAR(255) 
               DETERMINISTIC
BEGIN 
  DECLARE i, len SMALLINT DEFAULT 1; 
  DECLARE ret VARCHAR(255) DEFAULT ''; 
  DECLARE c VARCHAR(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 !
DELIMITER ; 

2 个答案:

答案 0 :(得分:1)

自己创建名为alphas的存储函数。它逐个遍历输入文本字符串的字符并删除所有数字。

DELIMITER !

DROP FUNCTION IF EXISTS alphas! 

CREATE FUNCTION alphas ( str VARCHAR(255) ) 
                   RETURNS VARCHAR(255) 
                   DETERMINISTIC
BEGIN 
  DECLARE i, len SMALLINT DEFAULT 1; 
  DECLARE ret VARCHAR(255) DEFAULT ''; 
  DECLARE c VARCHAR(1);   /* NOT CHAR!  NOT CHAR! NOT CHAR! */ 
  SET len = CHAR_LENGTH( str ); 
  REPEAT 
    BEGIN 
      SET c = MID( str, i, 1 ); 
      IF NOT c REGEXP '[[:digit:]]' THEN 
        SET ret=CONCAT(ret,c); 
      END IF; 
      SET i = i + 1; 
    END; 
  UNTIL i > len END REPEAT; 
  RETURN ret; 
END !
DELIMITER ; 

然后这样做。

 SELECT alphas(column) AS alphacolumn

这是一个有用的资源,我从中抄袭了这个功能。 http://www.artfulsoftware.com/infotree/qrytip.php?id=815

答案 1 :(得分:0)

如果您使用UDF是一个选项,则可以使用REGEXP_REPLACE。您可以将其与模式'[0-9]+$'一起使用以删除数字。