DECLARE @S VARCHAR(100), @Delimiters VARCHAR(100);
SET @Delimiters='!,.; :=+'+CHAR(10)+CHAR(13)+CHAR(9)+CHAR(160);
SET @S='Ма11ма,!, мы2ла! раму!красным мылом';
WITH CTE(S,L) AS (SELECT REPLACE(@S,' ', CHAR(160)), LEN(@S))
SELECT REPLACE((SELECT ''+S FROM
(
SELECT V.number, SUBSTRING(CTE.S,V.number,
(
SELECT MIN(VV.number)
FROM CTE JOIN master.dbo.spt_values VV
ON VV.type='P' AND VV.number BETWEEN V.number AND CTE.L+1
AND SUBSTRING(CTE.S+LEFT(@Delimiters,1),VV.number,1) LIKE '['+@Delimiters+']'
)-V.number)
FROM master.dbo.spt_values V
WHERE V.type='P' AND V.number BETWEEN 1 AND CTE.L+1
AND SUBSTRING(LEFT(@Delimiters,1)+CTE.S,V.number,1) LIKE '['+@Delimiters+']'
UNION ALL
SELECT V.number, SUBSTRING(CTE.S,V.number,1)
FROM master.dbo.spt_values V
WHERE V.type='P' AND V.number BETWEEN 1 AND LEN(@S)+1
AND SUBSTRING(CTE.S,V.number,1) LIKE '['+@Delimiters+']'
) T(N,S)
WHERE S>''
ORDER BY N DESC
FOR XML PATH('')), CHAR(160),' ')
FROM CTE; |