删除所有空格并将多行组合到SQL中的单行

时间:2017-09-14 17:34:56

标签: sql sql-server sql-server-2014

从SQL Server 2014中删除字符串中的所有空格的最佳方法是什么?

我的字符串是:

Maximize your productivity for building engaging,

 beautiful web mapping applications

尝试删除单词之间的字符串和1个空格之间的输入和制表符空格。结果应该是:

Maximize your productivity for building engaging, beautiful web mapping applications

2 个答案:

答案 0 :(得分:4)

您可以使用replace(),但这有点棘手:

select replace(replace(replace(replace(replace(col, ' ', '<>'
                                              ), '
', '<>'
                                      ), ' ', '<>'  -- tab goes here
                              ), '><', ''
                       ), '<>', ' '
               )
from t;

我们的想法是将空格替换为<>,然后删除所有><只留下一个空格。例如:

a    b c     -- original data with three spaces and one space
a<><><>b<>c  -- after replacing spaces with <>
a<>b<>c      -- after removing ><
a b c        -- after replacing <> with a space

答案 1 :(得分:1)

如果对UDF开放,则以下内容将删除所有控制字符并重复空格。

几个月前,戈登的回答启发了<重复空间的删除( OK被盗)。

示例

Declare @S varchar(max) = 'Maximize your productivity for building engaging,

 beautiful web mapping applications'


Select [dbo].[svf-Str-Strip-Control](@S)

返回

Maximize your productivity for building engaging, beautiful web mapping applications

感兴趣的UDF

CREATE FUNCTION [dbo].[svf-Str-Strip-Control](@S varchar(max))
Returns varchar(max)
Begin
    Select @S=Replace(@S,char(n),' ')
     From  (values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12),(13),(14),(15),(16),(17),(18),(19),(20),(21),(22),(23),(24),(25),(26),(27),(28),(29),(30),(31) ) N(n)

    Return LTrim(RTrim(Replace(Replace(Replace(@S,' ','><'),'<>',''),'><',' ')))
End
--Select [dbo].[svf-Str-Strip-Control]('Michael        '+char(13)+char(10)+'LastName')  --Returns: Michael LastName