DELIMITER //
CREATE FUNCTION REMOVE_BRACKETS(input TEXT CHARACTER SET utf8 COLLATE utf8_bin)
RETURNS TEXT CHARACTER SET utf8 COLLATE utf8_bin
BEGIN
DECLARE output TEXT CHARACTER SET utf8 COLLATE utf8_bin DEFAULT '';
DECLARE in_brackets BOOL DEFAULT FALSE;
DECLARE length INT;
IF(input IS NULL)
THEN
RETURN NULL;
END IF;
WHILE(TRUE) DO
SET length = LOCATE(CASE WHEN in_brackets THEN ']' ELSE '[' END, input);
IF(length = 0)
THEN
RETURN CONCAT(output, input);
END IF;
IF(in_brackets)
THEN
SET in_brackets = FALSE;
ELSE
SET output = CONCAT(output, SUBSTRING(input, 1, length - 1));
SET in_brackets = TRUE;
END IF;
SET input = SUBSTRING(input, length + 1);
END WHILE;
END //
DELIMITER ;
6条答案
按热度按时间wnavrhmk1#
使用此解决方案:
请记住,由于MySQL的最小正则表达式支持的限制,这将不适用于 (将返回空白):
...如果要保留
keepthistext1
和keepthistext2
,因为它将删除第一个左括号和最后一个右括号之间的 * 所有内容 *。w8rqjzmb2#
可以尝试使用函数
SUBSTRING_INDEX
。语法为:在这种情况下,它可能类似于:
这将有所帮助,虽然我还没有检查查询。有关此函数的进一步参考,您可以查看这里
uqcuzwp83#
MySQL不支持正则表达式,所以唯一的方法是使用PHP等编写的外部程序,或者使用存储过程。
lxkprmvk4#
下面是一个用户定义的函数,它可以实现这个功能,并且可以处理字符串中的多个括号对:
sigwle7e5#
可以使用UDF(用户定义函数)
看看这个https://launchpad.net/mysql-udf-regexp
因此,您只需创建与正则表达式匹配的括号,并将普通的REPLACE语句与此函数配合使用:)
5gfr0r5j6#
选择尝试此:
在update语句中使用它。