Спосіб №1
Перший спосіб полягає в заміні зайвих пробілів між словами на незвичайне поєднання символів у якості тимчасового маркера. Потім ви можете замінити символи тимчасового маркера за допомогою функції заміни, а не циклу.
Ось приклад коду, який замінює текст у змінній String.
DECLARE @testString AS VARCHAR(256) = ' Test text with random* spacing. Please normalize this spacing!';
SELECT REPLACE(REPLACE(REPLACE(@testString, ' ', '*^'), '^*', ''), '*^', ' ');
Тест часу виконання №1: За десять запусків цього методу заміни середній час очікування відповідей сервера становив 1,7 мілісекунди, а загальний час виконання - 4,6 мілісекунд. Тест часу виконання №2: Середній час очікування відповідей сервера становив 1,7 мілісекунди, а загальний час виконання - 3,7 мілісекунд.
Спосіб №2
Другий метод не такий елегантний, як перший, але також виконує роботу. Цей метод працює шляхом введення чотирьох (або необов'язково більше) заміни операторів, які замінюють два порожні пробіли одним порожнім пробілом.
DECLARE @testString AS VARCHAR(256) = ' Test text with random* spacing. Please normalize this spacing!';
SELECT REPLACE(REPLACE(REPLACE(REPLACE(@testString,' ',' '),' ',' '),' ',' '),' ',' ')
Тест часу виконання №1: За десять запусків цього способу заміни середній час очікування відповідей сервера становив 1,9 мілісекунд, а загальний час виконання - 3,8 мілісекунд. Тест часу виконання №2: Середній час очікування відповідей сервера становив 1,8 мілісекунди, а загальний час виконання - 4,8 мілісекунди.
Метод №3
Третій спосіб заміни зайвих пробілів між словами - це використання простого циклу. Ви можете зробити перевірку додаткових пробілів у циклі, а потім використовувати функцію заміни, щоб зменшити зайві пробіли з кожною ітерацією циклу.
DECLARE @testString AS VARCHAR(256) = ' Test text with random* spacing. Please normalize this spacing!';
WHILE CHARINDEX(' ',@testString) > 0
SET @testString = REPLACE(@testString, ' ', ' ')
SELECT @testString
Тест часу виконання №1: За десять запусків цього способу заміни середній час очікування відповідей сервера становив 1,8 мілісекунди, а загальний час виконання - 3,4 мілісекунди. Тест часу виконання №2: Середній час очікування відповідей сервера становив 1,9 мілісекунд, а загальний час виконання - 2,8 мілісекунд.