2012-05-05 5 views
2

文字列の右と左の両方からスペースを取得するこの関数(TRIM_REPLACE)があります。しかし、私はそれを修正するよう努めていますので、それは中間でトリムしますが、私はむしろそれを別々に行うよりも機能を組み合わせるでしょう。トリムと置換機能を組み合わせて、文字列内の任意の場所を削除するにはどうすればよいですか?

:さんは

Input 
-------------------------- 
Peter<space><space>Griffin 

<space>は、上記の入力内の1つの空白を示し、私は名前を持っているとしましょう。

私はそれがこのようになりますように追加のスペースをトリミングしたいと思います:あなたが複数のスペースを単一のスペースに置き換えられていることを見ることができるように

Output 
-------------------------- 
Peter<space>Griffin 

これはどのようにして達成できますか?

+0

は、正規表現のアクセスもを得るために、CLRで行く時間もございます。そうすれば、それは単一の呼び出しです。 – Paparazzi

答えて

8

スペースのペアのみが心配な場合は、使用できます。 。 。

ltrim(rtrim(replace(@String, ' ', ' '))) 

あなたが複数のスペースを持っている可能性がある場合は、ループにこれを配置する必要があります。

while charindex(' ', @string) > 0 
begin 
    set @string = replace(@string, ' ', ' '); 
end; 
return ltrim(rtrim(@string)); 
+0

丁寧な回答ですが、このドキュメントに基づいてループする必要はありません。http://msdn.microsoft.com/en-us/library/ms186862.aspxデフォルトではグローバル置換のように見えます。 – Marc

+0

こんにちは、私は上記の例をテストしました.LOOPは複数のスペースを移動する必要があるようです。例:私は列に仕事を追加しました:Peter ------ Grigginそしてループなしで、 -Grigginでは、1つのスペースしか削除されません。ループを使用すると、Peter-Griffinが返します。 – Asynchronous

+0

@Unaverage、あなたのコメントは十分にはっきりしていますが、私はあなたがすべてのケースで "グリフィン"を意味すると信じています(最初の2つの "グリギン"と最後の "グリフィン" – RonnBlack

関連する問題