sql >> データベース >  >> RDS >> Sqlserver

SQL Serverで文字列のすべての出現箇所を別の文字列に置き換える方法– REPLACE()

    SQL Serverでは、T-SQL REPLACE()を使用できます。 特定の文字列のすべてのインスタンスを別の文字列に置き換える関数。たとえば、特定の単語のすべての出現箇所を別の単語に置き換えることができます。

    構文

    公式の構文は次のとおりです。

    REPLACE ( string_expression , string_pattern , string_replacement )

    string_expressionの場所 置換する文字列(またはサブ文字列)の1つ以上のインスタンスを含む文字列、string_pattern 置換する文字列であり、string_replacement 置き換える文字列です。

    デモンストレーションの例を次に示します。

    SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', 'some', 'no');
    

    結果:

    My apartment has no art hanging on the walls and no pot plants hanging from the ceiling.

    したがって、この例では、someという単語を置き換えるだけです。 noという単語で 。

    複数の単語

    もちろん、単語を1つの単語にしか置き換えることができない(またはその逆)という規則はありません。結局のところ、文字列に単語、文字、数字、スペースなどが含まれているかどうかに関係なく、文字列を別の文字列に置き換えるだけです。

    したがって、その1つの単語を2つ以上の単語に簡単に置き換えることができます。

    SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', 'some', 'lots of');

    結果:

    My apartment has lots of art hanging on the walls and lots of pot plants hanging from the ceiling.

    したがって、ここではsomeという単語を置き換えます lots ofという言葉で 。

    単語を削除する

    文字列から単語(または部分文字列)を削除することもできます。これを行うには、単に空の文字列に置き換えます:

    SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', 'some', '');
    

    結果:

    My apartment has  art hanging on the walls and  pot plants hanging from the ceiling.

    ただし、よく見ると、新しい文字列には、単語を削除した場所に2つのスペースが含まれていることがわかります。これは、削除した単語の左右にスペースがあったためです。単語を削除しましたが、スペースを削除しなかったため、2つのスペースが残っています。

    削除する単語にスペースの1つを含めることで、これを修正できます。

    SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', 'some ', '');

    結果:

    My apartment has  art hanging on the walls and  pot plants hanging from the ceiling.

    注意してください!

    REPLACE()を使用すると、間違いを犯しやすくなります。 関数(または任意 その問題の機能を見つけて置き換えます。

    たとえば、この間違い:

    SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', 'art', 'pictures');
    

    結果:

    My appicturesment has some pictures hanging on the walls and some pot plants hanging from the ceiling.

    ご覧のとおり、artという単語を置き換えました pictures 。ただし、この場合、単語apartment 影響も受けました– apicturesmentになりました 、意図されていませんでした。これは、apartmentという単語が原因です。 サブストリングartが含まれています 。

    通常、検索語と置換語の前後にスペースを追加することで、これを防ぐことができます:

    SELECT REPLACE('My apartment has some art hanging on the walls and some pot plants hanging from the ceiling.', 'art', 'pictures');
    

    結果:

    My apartment has some pictures hanging on the walls and some pot plants hanging from the ceiling.

    これは明らかに、単語全体を置き換えることを前提としています。それぞれの状況が発生したときにそれを測定する必要があります。

    照合/大文字と小文字の区別

    オプションのCOLLATEを使用できます 入力に明示的な照合を適用する句。これは、大文字と小文字を区別する検索/置換操作などを実行する場合に便利です。

    2つの照合を比較する例を次に示します。

    大文字と小文字を区別しない

    SELECT REPLACE('Cats, cats, and more cats!' COLLATE SQL_Latin1_General_CP1_CI_AS, 'cat', 'Dog');

    結果:

    Dogs, Dogs, and more Dogs!

    この例では、指定する照合には_CIが含まれています その名前は「大文字と小文字を区別しない」を意味します。これにより、最初のオカレンスに大文字が含まれていても、すべてのオカレンスが置き換えられます。

    この方法は、置き換えられた文字列の大文字と小文字には影響しません。

    大文字と小文字を区別する

    SELECT REPLACE('Cats, cats, and more cats!' COLLATE SQL_Latin1_General_CP1_CS_AS, 'cat', 'Dog');

    結果:

    Cats, Dogs, and more Dogs!

    この例では、指定する照合には_CSが含まれています その名前は「大文字と小文字を区別する」を意味します。これにより、Catが最初に出現します 最初の文字が大文字であるため(2番目の引数の場合とは一致しません)、スキップされます。


    1. AndroidSQLiteの更新行が機能しない

    2. CURRENT_TIMESTAMPの例– MySQL

    3. MySQLで今日以上の日時

    4. あなたのデータベースがもはやあなたのために働いていないことの兆候