我有一个表为address
列。REGEX在mysql查询
地址值为"#12-3/98 avenue street"
,其中包含数字,特殊字符和字母。
我想写我的SQL查询USNG regex
到去除特殊字符从地址值
例如:“12398avenuestreet
”去除特殊字符
谢谢后,将我想要的值。
我有一个表为address
列。REGEX在mysql查询
地址值为"#12-3/98 avenue street"
,其中包含数字,特殊字符和字母。
我想写我的SQL查询USNG regex
到去除特殊字符从地址值
例如:“12398avenuestreet
”去除特殊字符
谢谢后,将我想要的值。
您不需要RegExp进行简单的字符替换。
不幸的是,MySQL的正则表达式是“只匹配”,你不能做你的查询替换。这使您只有这样的事情(女巫是非常,非常愚蠢的):
SELECT REPLACE(REPLACE(address, '?', ''), '#', '') -- and many many other nested replaces
FROM table
或者把这个逻辑应用程序(在这里是最好的选择)里面。
MySQL的正则表达式只适用于模式匹配而不是替换,所以你最好的选择是create a function或Replace()的重复使用。
据我所知,不可能通过MySQL regex进行替换,因为这些功能仅用于匹配。
或者,您可以使用MySQL Replace此:
SELECT REPLACE(REPLACE(REPLACE(REPLACE(address, '#', ''), '-', ''), '/', ''), ' ', '') FROM table;
这将删除#
,-
,/
和空间,从而导致你想要的的字符串中。
也许这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);
您可以使用MySQL的this UDF。然后简单地,
update my_table set my_column = PREG_REPLACE('/[^A-Za-z0-9]/' , '' , my_column);
请你breif怎么做呢通过 – 2011-02-14 09:42:23
你出现在我的答案链接创建一个功能,它是全功能的声明。 – 2011-02-14 09:43:01