的MySQL删除字符串中的所有字母数字字符但有两个字符
问题描述:
我有此功能来消除所有字母数字字符:的MySQL删除字符串中的所有字母数字字符但有两个字符
DROP FUNCTION IF EXISTS alphanum;
DELIMITER |
CREATE FUNCTION alphanum(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 '[[:alnum:]]' THEN
SET ret=CONCAT(ret,c);
END IF;
SET i = i + 1;
END;
UNTIL i > len END REPEAT;
RETURN ret;
END |
DELIMITER ;
如何修改它也让这两个字符:[
,]
?
例如:
alphanum('hell;o [world] number8$')
会给:hello[world]number8
答
变化:
IF c REGEXP '[[:alnum:]]' THEN
要:
IF c REGEXP '[[:alnum:]\[\]]' THEN
编辑:
我想我从来没有在MySQL documentation注意到了这一点:
要包括字符]字符,它必须紧跟在开括号[。
IF c REGEXP '[\]\[[:alnum:]]' THEN
我不知道,如果反斜杠是必要的,所以这可能工作:
IF c REGEXP '[]\[[:alnum:]]' THEN
或者:
IF c REGEXP '[[.left-square-bracket.][.right-square-bracket.][:alnum:]]' THEN
答
只需更换这行
IF c REGEXP '[[:alnum:]]' THEN
(wh ERE你只允许字母和数字),与
IF c REGEXP '[[:alnum:]]' OR c = '[' OR c = ']' THEN
或
IF c REGEXP '[[:alnum:]]' OR c IN ('[', ']') THEN
(你在哪里,也罚款 '[' 和 ']')。
它不会返回任何...空字符串。 – avi
@avi。 。 。显然这是(另一个)与“常规”正则表达式的区别。 MySQL确实有办法解决它。 –