如何组合修剪和替换功能以删除字符串中的任何位置?

Asy*_*ous 2 sql t-sql sql-server-2008

我有这个函数(TRIM_REPLACE)从字符串的右侧和左侧获取空格.但是,我试图修改它,以便它在中间修剪,但我宁愿结合功能,而不是单独做它.

示例:假设我有一个名字

Input
--------------------------
Peter<space><space>Griffin
Run Code Online (Sandbox Code Playgroud)

<space> 在上面的输入中指出一个空格.

我想修剪一下额外的空间,看起来像这样:

Output
--------------------------
Peter<space>Griffin
Run Code Online (Sandbox Code Playgroud)

如您所见,多个空格被替换为单个空格.

CREATE FUNCTION dbo.TRIM_REPLACE
(
    @STRING     VARCHAR(MAX)
)
RETURNS VARCHAR(MAX)
    BEGIN
        RETURN LTRIM(RTRIM(@STRING))  + REPLACE(@STRING, '  ',' ')  
    END
GO
Run Code Online (Sandbox Code Playgroud)

我该如何做到这一点?

Gor*_*off 9

如果你只关心空格对,你可以使用...

ltrim(rtrim(replace(@String, '  ', ' ')))
Run Code Online (Sandbox Code Playgroud)

如果您可能有多个空格,则需要将其置于循环中:

while charindex('  ', @string) > 0
begin
    set @string = replace(@string, '  ', ' ');
end;
return ltrim(rtrim(@string));
Run Code Online (Sandbox Code Playgroud)