为了账号安全,请及时绑定邮箱和手机立即绑定

在T-SQL中用单个空格替换重复的空格

/ 猿问

在T-SQL中用单个空格替换重复的空格

慕工程0101907 2019-11-26 10:00:35

我需要确保一个给定的字段在字符之间不要有一个以上的空格(我并不关心所有的空白,而只关心空格)。


所以


'single    spaces   only'

需要变成


'single spaces only'

下面的行不通


select replace('single    spaces   only','  ',' ')

因为它会导致


'single  spaces  only'

我真的更喜欢使用本地T-SQL,而不是基于CLR的解决方案。


有什么想法吗?


查看完整描述

4 回答

?
RISEBY

更整洁:


select string = replace(replace(replace(' select   single       spaces',' ','<>'),'><',''),'<>',' ')

输出:


选择单个空格


查看完整回答
反对 回复 2019-11-26
?
拉风的咖菲猫

这将工作:


declare @test varchar(100)

set @test = 'this   is  a    test'


while charindex('  ',@test  ) > 0

begin

   set @test = replace(@test, '  ', ' ')

end


select @test


查看完整回答
反对 回复 2019-11-26
?
月关宝盒

如果您知道一行中最多只能有一定数量的空格,则可以嵌套替换:


replace(replace(replace(replace(myText,'  ',' '),'  ',' '),'  ',' '),'  ',' ')

4个替换项最多可固定16个连续空格(16个,然后8个,然后4个,然后2个,然后1个)


如果可能要长得多,那么您必须执行类似内联函数的操作:


CREATE FUNCTION strip_spaces(@str varchar(8000))

RETURNS varchar(8000) AS

BEGIN 

    WHILE CHARINDEX('  ', @str) > 0 

        SET @str = REPLACE(@str, '  ', ' ')


    RETURN @str

END

然后就做


SELECT dbo.strip_spaces(myText) FROM myTable


查看完整回答
反对 回复 2019-11-26
?
浮云间

update mytable

set myfield = replace (myfield, '  ',  ' ')

where charindex('  ', myfield) > 0 

替换将在所有双精度空格上起作用,而无需进行多次替换。这是基于集合的解决方案。


查看完整回答
反对 回复 2019-11-26

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信