删除所有空格并将多行合并为 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;
这个想法是将一个空格替换为<>
,然后删除所有><
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 中的单行的主要内容,如果未能解决你的问题,请参考以下文章