Mysql 删除方括号中的文本

Mysql 删除方括号中的文本,mysql,sql,Mysql,Sql,我试图删除方括号之间的文本,但它似乎只是删除方括号 SELECT Replace(Replace(aud_desc, '[', ''), ']', '') from _audit aud_desc是这是一个[a]测试然而,通过上面的内容,我已经将它显示为这是一个测试,我不确定为什么它不删除括号中的文本 我遗漏了什么吗?使用替换,长度,定位,反转&子字符串功能 SELECT REPLACE(aud_desc, SUBSTRING(aud_desc, LOCATE('[', aud_desc),

我试图删除方括号之间的文本,但它似乎只是删除方括号

SELECT Replace(Replace(aud_desc, '[', ''), ']', '') from _audit
aud_desc
这是一个[a]测试
然而,通过上面的内容,我已经将它显示为
这是一个测试
,我不确定为什么它不删除括号中的文本


我遗漏了什么吗?

使用
替换
长度
定位
反转
&
子字符串
功能

SELECT REPLACE(aud_desc, SUBSTRING(aud_desc, LOCATE('[', aud_desc), LENGTH(aud_desc) - LOCATE(']', REVERSE(aud_desc)) - LOCATE('[', aud_desc) + 2), '') AS aud_desc
FROM _audit
输入:

aud_desc

word [brakcet] word
[brakcet] word
word [brakcet]
word word
word
word
输出:

aud_desc

word [brakcet] word
[brakcet] word
word [brakcet]
word word
word
word
SQL Fiddle:

试试这个

SELECT CONCAT(SUBSTRING_INDEX(aud_desc,'[',1),SUBSTRING_INDEX(aud_desc,']',-1)) 
FROM _audit;

此查询不应删除括号中的文本。它所做的只是将
[
]
字符替换为空字符,从而删除它们


要删除括号中的文本,您可以使用函数获取
[
的位置,然后再次
定位
以获取
]
的位置,然后使用函数根据
[]获取字符串的适当部分
符号位置。

这里有一个用户定义的函数,它可以执行此操作,并与字符串中的多个括号对一起工作:

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_parens 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 ;

因为您只是用间隔符替换方括号,所以替换将用给定的新字符串替换与您的模式匹配的字符串部分,在您的情况下,您要求它将“[”替换为“”,然后再替换“]“如果字符串中有两个括号中的内容,则使用“”无效。@在这种情况下,您可以使用循环运行n次,其中n是由[and]的计数除以2计算出来的?我发布了一个答案,其中包含一个处理括号中文本的多个副本的函数。您发布的解决方案是贪婪的,所以按照您的建议进行循环是行不通的,因为循环的第一次迭代将去掉从第一个开始括号到最后一个结束括号的所有内容。@jcedy刚刚阅读了您的解决方案,比我的解决方案好得多,而且更具可伸缩性。