Это можно сделать рекурсивно с помощью функции:
CREATE FUNCTION dbo.RemSpaceFromStr(@str VARCHAR(MAX)) RETURNS VARCHAR(MAX) AS
BEGIN
RETURN (CASE WHEN CHARINDEX(' ', @str) > 0 THEN
dbo.RemSpaceFromStr(REPLACE(@str, ' ', ' ')) ELSE @str END);
END
тогда, например:
SELECT dbo.RemSpaceFromStr('some string with many spaces') AS NewStr
возвращается:
NewStr
some string with many spaces
Или решение, основанное на методе, описанном @ agdk26 или @Neil Knight (но безопаснее)
оба примера возвращают вывод выше:
SELECT REPLACE(REPLACE(REPLACE('some string with many spaces'
, ' ', ' ' + CHAR(7)), CHAR(7) + ' ', ''), ' ' + CHAR(7), ' ') AS NewStr
--but it remove CHAR(7) (Bell) from string if exists...
или
SELECT REPLACE(REPLACE(REPLACE('some string with many spaces'
, ' ', ' ' + CHAR(7) + CHAR(7)), CHAR(7) + CHAR(7) + ' ', ''), ' ' + CHAR(7) + CHAR(7), ' ') AS NewStr
--but it remove CHAR(7) + CHAR(7) from string
Как это работает:
Внимание:
Символ / строка, используемые для замены пробелов, не должны существовать в начале или конце строки и стоять отдельно.