Is there a more elegant way of doing this. I want to replace repeating blanks with single blanks….
declare @i int set @i=0 while @i <= 20 begin update myTable set myTextColumn = replace(myTextColumn, ' ', ' ') set @i=@i+1 end
(its sql server 2000 – but I would prefer generic SQL)
Advertisement
Answer
Here is a simple set based way that will collapse multiple spaces into a single space by applying three replaces.
DECLARE @myTable TABLE (myTextColumn VARCHAR(50)) INSERT INTO @myTable VALUES ('0Space') INSERT INTO @myTable VALUES (' 1 Spaces 1 Spaces. ') INSERT INTO @myTable VALUES (' 2 Spaces 2 Spaces. ') INSERT INTO @myTable VALUES (' 3 Spaces 3 Spaces. ') INSERT INTO @myTable VALUES (' 4 Spaces 4 Spaces. ') INSERT INTO @myTable VALUES (' 5 Spaces 5 Spaces. ') INSERT INTO @myTable VALUES (' 6 Spaces 6 Spaces. ') select replace( replace( replace( LTrim(RTrim(myTextColumn)), ---Trim the field ' ',' |'), ---Mark double spaces '| ',''), ---Delete double spaces offset by 1 '|','') ---Tidy up AS SingleSpaceTextColumn from @myTable
Your Update statement can now be set based:
update @myTable set myTextColumn = replace( replace( replace( LTrim(RTrim(myTextColumn)), ' ',' |'), '| ',''), '|','')
Use an appropriate Where clause to limit the Update to only the rows that have you need to update or maybe have double spaces.
Example:
where 1<=Patindex('% %', myTextColumn)
I have found an external write up on this method: REPLACE Multiple Spaces with One