从SQL Server 2014中删除字符串中的所有空格的最佳方法是什么?
我的字符串是:
Maximize your productivity for building engaging,
beautiful web mapping applications
尝试删除单词之间的字符串和1个空格之间的输入和制表符空格。结果应该是:
Maximize your productivity for building engaging, beautiful web mapping applications
答案 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