방법 # 1
첫 번째 방법은 단어 사이의 여분의 공백을 임시 마커로 일반적이지 않은 기호 조합으로 바꾸는 것입니다. 그런 다음 루프가 아닌 대체 기능을 사용하여 임시 마커 기호를 대체 할 수 있습니다.
다음은 String 변수 내의 텍스트를 대체하는 코드 예제입니다.
DECLARE @testString AS VARCHAR(256) = ' Test text with random* spacing. Please normalize this spacing!';
SELECT REPLACE(REPLACE(REPLACE(@testString, ' ', '*^'), '^*', ''), '*^', ' ');
실행 시간 테스트 # 1 :이 대체 방법을 10 번 실행했을 때 서버 응답의 평균 대기 시간은 1.7 밀리 초이고 총 실행 시간은 4.6 밀리 초였습니다. 실행 시간 테스트 # 2 : 서버 응답의 평균 대기 시간은 1.7 밀리 초이고 총 실행 시간은 3.7 밀리 초였습니다.
방법 # 2
두 번째 방법은 첫 번째 방법만큼 우아하지는 않지만 작업을 완료합니다. 이 방법은 두 개의 공백을 하나의 공백으로 바꾸는 네 개 (또는 선택적으로 더 많은) replace 문을 중첩하여 작동합니다.
DECLARE @testString AS VARCHAR(256) = ' Test text with random* spacing. Please normalize this spacing!';
SELECT REPLACE(REPLACE(REPLACE(REPLACE(@testString,' ',' '),' ',' '),' ',' '),' ',' ')
실행 시간 테스트 # 1 :이 대체 방법을 10 번 실행했을 때 서버 응답의 평균 대기 시간은 1.9 밀리 초이고 총 실행 시간은 3.8 밀리 초였습니다. 실행 시간 테스트 # 2 : 서버 응답의 평균 대기 시간은 1.8 밀리 초이고 총 실행 시간은 4.8 밀리 초였습니다.
방법 # 3
단어 사이에 여분의 공백을 바꾸는 세 번째 방법은 간단한 루프를 사용하는 것입니다. while 루프에서 여분의 공백을 확인한 다음 replace 함수를 사용하여 루프가 반복 될 때마다 여분의 공백을 줄일 수 있습니다.
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 :이 대체 방법을 10 번 실행했을 때 서버 응답의 평균 대기 시간은 1.8 밀리 초이고 총 실행 시간은 3.4 밀리 초였습니다. 실행 시간 테스트 # 2 : 서버 응답의 평균 대기 시간은 1.9 밀리 초이고 총 실행 시간은 2.8 밀리 초였습니다.