我找不到MySQL的这个问题,所以这里是:
我需要将字符串中的所有双倍或更多空格修剪为1个单独空格.
例如:"快速布朗狐狸"应该是:"快速布朗狐狸"
函数REPLACE(str,"","")只删除双空格,但是当有更多空格时会留下多个空格...
小智 18
最短,最令人惊讶的最快解决方案:
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
Run Code Online (Sandbox Code Playgroud)
Арт*_*цын 17
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');
Run Code Online (Sandbox Code Playgroud)
tom*_*ors 12
我知道这个问题用mysql标记,但如果你有幸使用MariaDB,你可以更容易地做到这一点:
SELECT REGEXP_REPLACE(column, '[[:space:]]+', ' ');
Run Code Online (Sandbox Code Playgroud)
nob*_*ody 10
这个解决方案不是很优雅,但因为你没有任何其他选择:
UPDATE t1 set str = REPLACE( REPLACE( REPLACE( str, " ", " " ), " ", " " ), " ", " " );
Run Code Online (Sandbox Code Playgroud)
小智 6
对于 MySQL 8+,您可以使用REGEXP_REPLACE函数:
UPDATE `your_table`
SET `col_to_change`= REGEXP_REPLACE(col_to_change, '[[:space:]]+', ' ');
Run Code Online (Sandbox Code Playgroud)
小智 6
这是一个古老的技巧,不需要正则表达式或复杂的函数。
您可以使用替换功能3次,如下所示:
REPLACE('This is my long string',' ','<>')
Run Code Online (Sandbox Code Playgroud)
变成:
This<>is<><><><>my<><><>long<><><><>string
Run Code Online (Sandbox Code Playgroud)
然后,将所有出现的'> <'用空字符串''替换,将其包装在另一个替换中:
REPLACE(
REPLACE('This is my long string',' ','<>'),
'><',''
)
This<>is<>my<>long<>string
Run Code Online (Sandbox Code Playgroud)
然后最后一个最后的替换将'<>'转换回单个空格
REPLACE(
REPLACE(
REPLACE('This is my long string',
' ','<>'),
'><',''),
'<>',' ')
This is my long string
Run Code Online (Sandbox Code Playgroud)
本示例是使用MYSQL创建的(在前面放置了SELECT),但是可以使用多种语言。
搜索后我最终编写了一个函数,即
如果存在则删除函数trim_spaces;
delimiter $$
CREATE DEFINER=`root`@`localhost` FUNCTION `trim_spaces`(`dirty_string` text, `trimChar` varchar(1))
RETURNS text
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
declare cnt,len int(11) ;
declare clean_string text;
declare chr,lst varchar(1);
set len=length(dirty_string);
set cnt=1;
set clean_string='';
while cnt <= len do
set chr=right(left(dirty_string,cnt),1);
if chr <> trimChar OR (chr=trimChar AND lst <> trimChar ) then
set clean_string =concat(clean_string,chr);
set lst=chr;
end if;
set cnt=cnt+1;
end while;
return clean_string;
END
$$
delimiter ;
Run Code Online (Sandbox Code Playgroud)
用法:
set @str='------apple--------banana-------------orange---' ;
select trim_spaces( @str,'-')
输出:apple-banana-orange-
函数的参数trimChar可以是任何重复且您想要删除的字符。
请注意,它将保留重复集中的第一个字符
干杯:)
| 归档时间: |
|
| 查看次数: |
36125 次 |
| 最近记录: |