有没有更优雅的方法来做到这一点。我想用单个空格替换重复的空格......
declare @i int
set @i=0
while @i <= 20
begin
update myTable
set myTextColumn = replace(myTextColumn, ' ', ' ')
set @i=@i+1
end
(它的 sql server 2000 - 但我更喜欢通用 SQL)
最佳答案
这有效:
UPDATE myTable
SET myTextColumn =
REPLACE(
REPLACE(
REPLACE(myTextColumn
,' ',' '+CHAR(1)) -- CHAR(1) is unlikely to appear
,CHAR(1)+' ','')
,CHAR(1),'')
WHERE myTextColumn LIKE '% %'
完全基于集合;没有循环。
因此,我们用一个不寻常的字符和一个空格替换任意两个空格。如果我们将不常见的字符称为 X,则 5 个空格变为:“X X ”,6 个空格变为“X X X”。然后我们用空字符串替换“X”。因此,5 个空格变为“”,6 个空格变为“X”。然后,如果空格数为偶数,我们将删除所有剩余的“X”,留下一个空格。
关于SQL方法用单个空格替换重复空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2182877/