我正在尝试删除方括号之间的文本,但它似乎只是删除括号。
SELECT Replace(Replace(aud_desc, '[', ''), ']', '') from _audit
aud_desc
是This is [a] test
但是上面我已经让它显示This is a test
,我不知道它为什么不删除括号中的文本。
我错过了什么吗?
答案 0 :(得分:2)
使用complx(complx &c): complx(c.real, c.imag) {}
,REPLACE
,LENGTH
,LOCATE
& 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]
答案 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}}函数根据[]
符号位置获取字符串的适当部分。