删除方括号之间的文本

时间:2015-08-28 09:26:53

标签: mysql sql

我正在尝试删除方括号之间的文本,但它似乎只是删除括号。

SELECT Replace(Replace(aud_desc, '[', ''), ']', '') from _audit

aud_descThis is [a] test但是上面我已经让它显示This is a test,我不知道它为什么不删除括号中的文本。

我错过了什么吗?

4 个答案:

答案 0 :(得分:2)

使用complx(complx &c): complx(c.real, c.imag) {} REPLACELENGTHLOCATE& REVERSE的功能。

SUBSTRING

输入:

aud_desc

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]

SQL小提琴:http://sqlfiddle.com/#!9/178bb/1/0

答案 1 :(得分:1)

这是一个用户定义的函数,它可以在字符串中使用多个括号对

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 ;

答案 2 :(得分:0)

试试这个

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

答案 3 :(得分:0)

此查询不应删除括号中的文本。所有这一切 - 用空字符替换[]个字符,从而删除它们。

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