2011-02-14 44 views
1

我有一个表为address列。REGEX在mysql查询

地址值为"#12-3/98 avenue street",其中包含数字,特殊字符和字母。

我想写我的SQL查询USNG regex去除特殊字符从地址值

例如:“12398avenuestreet”去除特殊字符

谢谢后,将我想要的值。

回答

0

不幸的是,MySQL的正则表达式是“只匹配”,你不能做你的查询替换。这使您只有这样的事情(女巫是非常,非常愚蠢的):

SELECT REPLACE(REPLACE(address, '?', ''), '#', '') -- and many many other nested replaces 
FROM table 

或者把这个逻辑应用程序(在这里是最好的选择)里面。

0

MySQL的正则表达式只适用于模式匹配而不是替换,所以你最好的选择是create a functionReplace()的重复使用。

+0

请你breif怎么做呢通过 – 2011-02-14 09:42:23

+0

你出现在我的答案链接创建一个功能,它是全功能的声明。 – 2011-02-14 09:43:01

0

据我所知,不可能通过MySQL regex进行替换,因为这些功能仅用于匹配。

或者,您可以使用MySQL Replace此:

SELECT REPLACE(REPLACE(REPLACE(REPLACE(address, '#', ''), '-', ''), '/', ''), ' ', '') FROM table; 

这将删除#-/和空间,从而导致你想要的的字符串中。

1

也许这function帮助您

CREATE FUNCTION strip_non_alpha(
_dirty_string varchar(40) 
) 
RETURNS varchar(40) 
BEGIN 
DECLARE _length int; 
DECLARE _position int; 
DECLARE _current_char varchar(1); 
DECLARE _clean_string varchar(40); 

SET _clean_string = ''; 
SET _length = LENGTH(_dirty_string); 
SET _position = 1; 
WHILE _position <= _length DO 
SET _current_char = SUBSTRING(_dirty_string, _position, 1); 

IF _current_char REGEXP '[A-Za-z0-9]' THEN 
SET _clean_string = CONCAT(_clean_string, _current_char); 
END IF; 

SET _position = _position + 1; 
END WHILE; 

RETURN CONCAT('', _clean_string); 
END; 

,所以你需要调用这个喜欢

update mytable set address = strip_non_alpha(address); 
0

您可以使用MySQL的this UDF。然后简单地,

update my_table set my_column = PREG_REPLACE('/[^A-Za-z0-9]/' , '' , my_column);