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

Posted

技术标签:

【中文标题】删除所有空格并将多行合并为 SQL 中的单行【英文标题】:Remove all spaces and combine multiple lines to single line in SQL 【发布时间】:2017-09-14 17:34:56 【问题描述】:

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

我的字符串是:

Maximize your productivity for building engaging,

 beautiful web mapping applications

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

Maximize your productivity for building engaging, beautiful web mapping applications

【问题讨论】:

这是一个可重用的用户定义函数的好候选。 查看更新的答案。我删除了 32。没必要 【参考方案1】:

你可以使用replace(),但是有点棘手:

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

这个想法是将一个空格替换为&lt;&gt;,然后删除所有&gt;&lt;s,只留下一个。例如:

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

【讨论】:

它适用于例如 X 输入 y 字符串,但对于 X 输入 Y 输入 Z 不起作用【参考方案2】:

如果打开一个 UDF,下面将删除所有控制字符和重复空格。

删除重复空格的灵感来自于几个月前 Gordon 的 回答(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

【讨论】:

删除了值 (32)... 不需要/多余。

以上是关于删除所有空格并将多行合并为 SQL 中的单行的主要内容,如果未能解决你的问题,请参考以下文章

从 SQL Server 中的字符串中删除所有空格

如何将多行合并为表中的单行

SSIS 在不使用 SQL 的情况下将多行合并并连接成单行

MySql和Sql的单行注释和多行注释的区别

拆分2列中的特殊字符并在oracle中合并为多行

使用 RegEx 去除 C++ 中的多行注释