从MySQL列中删除所有数字字符

9
我想开发一个MySQL函数,可以仅从字符串中删除数字字符。

欢迎来到SO。请展示您的代码并告诉我们您遇到了什么问题。我们一定会帮助您的。 - Fahim Parkar
http://forge.mysql.com/tools/tool.php?id=233 - Fahim Parkar
2个回答

9
您可以编写一个用户自定义函数,在其中编写替换逻辑,或者您可以尝试以下操作:
Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(column,'9',''),'8',''),'7',''),'6',''),'5',''),'4',''),'3',''),'2',''),'1',''),'0','')

不过,如果不行的话,我们应该选择一个UDF。这只是一种替代方案。 - Sashi Kant
2
请注意,我无法在mysql 5.1中使用REPLACE(column,'[0-9]+','')。我没有尝试提供的替代答案。 - mooreds
2
遗憾的是,与postgresql不同,mysql默认不支持正则表达式替换。 - Kzqai
3
那么,您是否同意上面的答案,如其所写,是具有误导性的,应该进行修改?http://sqlfiddle.com/#!2/5ae225/3/1 这个语句确实可以执行,但它只尝试替换文字串 '[0-9]+',而这显然永远不会被找到。 - Kzqai
谢谢提供这个替代方案,它帮我省了很多打字的时间;不过第一个方案可惜不能用。 - oriadam
显示剩余3条评论

6
创建函数以完成此任务。
DROP FUNCTION IF EXISTS alphas; 
DELIMITER | 
CREATE FUNCTION alphas( str CHAR(32) ) RETURNS CHAR(16) 
BEGIN 
  DECLARE i, len SMALLINT DEFAULT 1; 
  DECLARE ret CHAR(32) DEFAULT ''; 
  DECLARE c CHAR(1); 
  SET len = CHAR_LENGTH( str ); 
  REPEAT 
    BEGIN 
      SET c = MID( str, i, 1 ); 
      IF c REGEXP '[[:alpha:]]' THEN 
        SET ret=CONCAT(ret,c); 
      END IF; 
      SET i = i + 1; 
    END; 
  UNTIL i > len END REPEAT; 
  RETURN ret; 
END | 
DELIMITER ; 
SELECT alphas('123ab45cde6789fg'); 
+----------------------------+ 
| alphas('123ab45cde6789fg') | 
+----------------------------+ 
| abcdefg                    | 
+----------------------------+ 

如果您只想要数字,请使用这个。
SET GLOBAL log_bin_trust_function_creators=1; 
DROP FUNCTION IF EXISTS digits; 
DELIMITER | 
CREATE FUNCTION digits( str CHAR(32) ) RETURNS CHAR(32) 
BEGIN 
  DECLARE i, len SMALLINT DEFAULT 1; 
  DECLARE ret CHAR(32) DEFAULT ''; 
  DECLARE c CHAR(1); 
  SET len = CHAR_LENGTH( str ); 
  REPEAT 
    BEGIN 
      SET c = MID( str, i, 1 ); 
      IF c BETWEEN '0' AND '9' THEN  
        SET ret=CONCAT(ret,c); 
      END IF; 
      SET i = i + 1; 
    END; 
  UNTIL i > len END REPEAT; 
  RETURN ret; 
END | 
DELIMITER ; 

SELECT digits('123ab45cde6789fg'); 
+----------------------------+ 
| digits('123ab45cde6789fg') | 
+----------------------------+ 
| 123456789                  | 
+----------------------------+ 

Reference


谢谢,Fahim。其实我不知道怎么接受答案。无论如何,感谢你的帮助。 - Ronak Shah
@RonakShah:我猜你是新手,所以分享这个是我的工作...刚开始的时候,我也不知道... - Fahim Parkar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接