方法#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
2番目の方法は、1番目の方法ほど洗練されていませんが、作業も完了します。この方法は、2つの空白スペースを1つの空白スペースに置き換える4つ(またはオプションでそれ以上)の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
単語間の余分なスペースを置き換える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ミリ秒でした。