我找不到MySQL的这个问题,所以它是这样的:
我需要将字符串中所有两个或更多的空格修剪为1个空格。
例如:"The Quick - Brown“应该是:”The Quick Brown Fox“。
函数REPLACE(str,“str”,“")只删除两个空格,但当有更多空格时则保留多个空格...
发布于 2019-04-02 21:38:30
这是一个不需要正则表达式或复杂函数的老把戏。
您可以使用replace函数3次来处理任意数量的空格,如下所示:
REPLACE('This is my long string',' ','<>')变成:
This<>is<><><><>my<><><>long<><><><>string然后,将所有出现的'><‘替换为空字符串'’,方法是将其包装在另一个替换中:
REPLACE(
REPLACE('This is my long string',' ','<>'),
'><',''
)
This<>is<>my<>long<>string最后,最后一次替换将'<>‘转换回一个空格
REPLACE(
REPLACE(
REPLACE('This is my long string',
' ','<>'),
'><',''),
'<>',' ')
This is my long string这个例子是用MYSQL创建的(把SELECT放在前面),但它可以在许多语言中工作。
请注意,您只需要3个替换函数来处理任意数量的要替换的字符。
发布于 2013-04-12 20:41:44
最短且令人惊讶的最快的解决方案:
CREATE FUNCTION clean_spaces(str VARCHAR(255)) RETURNS VARCHAR(255)
BEGIN
while instr(str, ' ') > 0 do
set str := replace(str, ' ', ' ');
end while;
return trim(str);
END发布于 2012-08-14 03:40:04
DELIMITER //
DROP FUNCTION IF EXISTS DELETE_DOUBLE_SPACES//
CREATE FUNCTION DELETE_DOUBLE_SPACES ( title VARCHAR(250) )
RETURNS VARCHAR(250) DETERMINISTIC
BEGIN
DECLARE result VARCHAR(250);
SET result = REPLACE( title, ' ', ' ' );
WHILE (result <> title) DO
SET title = result;
SET result = REPLACE( title, ' ', ' ' );
END WHILE;
RETURN result;
END//
DELIMITER ;
SELECT DELETE_DOUBLE_SPACES('a b');https://stackoverflow.com/questions/6940646
复制相似问题