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

SQLServerのSQLテキストを検索してREPLACE関数で置き換えるための上位5つの事実

    今日のコードエディタとワードプロセッサには、検索と置換の機能が備わっています。単語または単語のグループを変更する必要がある場合に役立ちます。小さな問題や変更のために、私たちの書いた作品を捨てたくありません。

    同じことが私たちのデータにも当てはまります。名前を変更する必要があるものを編集するように指示すると、ユーザーは私たちを呪うでしょう。そのため、データベースに書き込まれたテキストを置き換えるための検索および置換機能も利用できます。ここで、SQLのREPLACEコマンドが使用されます。

    SQLのREPLACE構文は次のとおりです。

    交換<元の文字列><検索する文字列><置換文字列>

    すべてのパラメーターが必須であることに注意してください。 <元の文字列> 文字列リテラルまたは式の文字列結果にすることができます。データベーステーブルでは、通常、値を変更する文字列列を渡します。一方、<検索する文字列> <元の文字列>内の文字列です 検索したい。最後に、<置換文字列>を渡します <検索する文字列>に置き換わります 。シンプルで十分ですね。

    ただし、いくつかの注意点があります。このようにして、間違った単語を置き換えないようにする方法や、SQLServerに重複するレコードを挿入しないようにする方法を見つけることができます。または、おそらく、正しい単語を置き換えないでください。そして、最後にデータを台無しにします。

    SQL REPLACEを初めて使用しますか?こちらが無料のチートシートです。以下にメールアドレスを入力するだけで、受信トレイに直接送信されます。

    かっこいいね?掘り下げましょう。

    [sendpulse-form id =” 12251”]

    1。 SQLREPLACEはすべてのオカレンスのテキストを置き換えます

    それは正しい。検索する文字列でテキスト全体をスイープします。それをお見せし、問題を説明させてください。以下の例をご覧ください:

    SELECT REPLACE('know the unknown','know','seek'); 
    -- OUTPUT: 'seek the unseekn. Surprise!
    

    知っている 文字列は2回存在します。つまり、 know 知らない n。注意しないと、スペルミスがデータに忍び寄ります。代わりに、完全な単語のみを検索するためのスペースを追加できます。変更されたコードは次のとおりです:

    SELECT REPLACE('know the unknown','know ','seek ');   
    -- OUTPUT: 'seek the unknown'.
    

    ずっといい?他のシナリオも考えられますが、要点はわかります。

    2。 SQLREPLACEはテキストを削除できます

    テキストエディタで単語を何もないものに置き換えてみましたか?または、SQLで重複を削除したいですか?これはSQLREPLACEでも発生します。次に例を示します:

    USE AdventureWorks
    GO
    
    SELECT
     EmailAddress
    ,REPLACE(EmailAddress,'-','') AS NewEmailAddress
    FROM person.EmailAddress;
    

    最初の列には、元の電子メールアドレスのドメイン名が含まれています。 2つ目は、元のドメイン名からハイフンを削除します。以下のスクリーンショットを参照してください:

    元の文字列から1つ以上の文字を削除する必要がある場合は、代わりに空のSQL文字列を使用してください。この方法でSQLの重複レコードを削除することもできます。

    3。照合はSQLREPLACEの結果に影響します

    SQL Serverをインストールすると、デフォルトの照合が使用されます。次に、これはデータベースとテーブル列によって使用されます。図2は、私が使用しているものを示しています:

    私のラップトップでは、 SQL_Latin1_CP1_CI_ASを使用しています 。大文字と小文字を区別しない照合です。 ( CIも参照してください。 cの照合名に ase i nsensitive)。したがって、 Dogという単語 、 DOG 、および dOg 同じように扱われます。

    実際に試してみましょう:

    DECLARE @string VARCHAR(200) = 'Cats are great pets 
    and so easy to take care of. They make good companions. 
    Having a cat around is good for children.';
    
    SELECT REPLACE(@string,'cat','dog');
    

    結果は次のとおりです。

    REPLACE機能により、 Catという単語が見つかりました s 最初の文とcatという単語 最後の文で。文字が大文字か小文字かは関係ありません。

    ただし、REPLACE内で照合の変更を大文字と小文字を区別するものに強制すると、どうなりますか? REPLACE内でCOLLATEを使用するコードは次のとおりです。

    DECLARE @string VARCHAR(200) = 'Cats are great pets and so easy to take care of.
    They make good companions. Having a cat around is good for children.';
    
    -- force a change to a case-sensitive collation. '_CS_' for case-sensitive
    SELECT REPLACE(@string COLLATE SQL_Latin1_General_CP1_CS_AS,'cat','dog'); 
    

    そして、これが出力です:

    これで、照合が結果にどのように影響するかがわかります。 および 現在、異なる方法で処理されます。段落が混乱します。したがって、レッスンでは、照合を慎重に使用することです。

    4。 SQLREPLACEをネストできます

    REPLACE関数をネストすることにより、すでに置き換えた単語を置き換えることができます。次に例を示します:

    USE AdventureWorks
    GO
    
    SELECT 
     definition
    ,REPLACE(REPLACE(definition,'CREATE PROCEDURE','ALTER PROCEDURE'),'BusinessEntityID','BusinessEntityNo')
    FROM sys.sql_modules a
    INNER JOIN sys.objects b ON a.object_id = b.object_id
    WHERE a.definition LIKE '%BusinessEntityID%'
    AND b.type = 'P';
    

    上記の例では、REPLACE内でREPLACEを使用しました。これは、 CREATE PROCEDUREを変更することです。 後の手順 次にBusinessEntityID BusinessEntityNoへ 。

    クエリは、 BusinessEntityIDを使用したスト​​アドプロシージャに影響します 桁。これは、テーブルの列の名前を変更し、影響を受けるデータベースコードを置き換える場合に役立ちます。ストアドプロシージャのパラメータも影響を受けますが、名前の一貫性を維持するためにそれらを置き換えることを選択できます。

    ALTERステートメントを実行する前に、適用される変更を確認する必要があることに注意してください。物事を台無しにしたくないですか?

    一方、REPLACEをネストすると、以前に catsで発生した問題を修正することもできます。 および 。修正方法は次のとおりです。

    DECLARE @string VARCHAR(200) = 'Cats are great pets and so easy to take care of.
    They make good companions. Having a cat around is good for children.';
    
    SELECT REPLACE(REPLACE(@string COLLATE SQL_Latin1_General_CP1_CS_AS,'cat','dog') COLLATE SQL_Latin1_General_CP1_CS_AS,'Cat','Dog');
    

    新しい結果を確認してください:

    図3の大文字と小文字の問題も修正されていることにも注意してください。

    5。 UPDATEとともに使用して、置き換えられたテキストを保存します

    これまで、SELECTクエリでSQLREPLACEのみを使用してきました。これにより、REPLACEの出力のみを確認できます。出力を保存するには、UPDATEも発行する必要があります。次に例を示します:

    USE AdventureWorks
    GO
    
    UPDATE Person.EmailAddress
     SET EmailAddress= REPLACE(EmailAddress,'-','');
    

    blog_postsを含むMySQLを使用した別の例を次に示します。 WordPressのテーブル。プライベートURLをパブリックURLに置き換える方法をご覧ください:

    -- View the possible results
    SELECT 
     guid 
    ,REPLACE(guid,'http://localhost/techblog','https://sqltechblog.net') AS NewGUID
    FROM blog_posts
    WHERE post_date > '2020-10-01';
    
    -- Update the blog_posts table by replacing localhost with a fictitious URL
    UPDATE blog_posts
    set guid = REPLACE(guid,'http://localhost/techblog','https://sqltechblog.net')
    WHERE post_date > '2020-10-01';
    

    上記の最初のステートメントの結果セットは、dbForge StudioforMySQLを使用して以下に表示されます。

    結論

    ここまでは順調ですね。 SQLのREPLACEが実際に何ができるかを見ました。メールアドレスやURLを変更する必要があるときにアイデアを与えることができます。ストアドプロシージャ、ビュー、またはシノニムで使用されるテーブルの列の名前を変更した場合。

    要約しましょう:

    • SQL REPLACEは、すべてのオカレンスのテキストを置き換えることができます。
    • テキストの一部を削除することもできます。
    • 照合設定はREPLACEの出力に影響を与える可能性があります。
    • SQLREPLACEの使用をネストできます。
    • 最後に、UPDATEを使用して置換されたテキストを保存します。

    この投稿が気に入ったら、お気に入りのソーシャルメディアで共有してください。下のコメントセクションであなたの考えも教えてください。


    1. sys.partitionsのパフォーマンス

    2. WindowsServer2019にXAMPPソフトウェアをインストールして構成する

    3. AzureでSQLServerを使い始める方法

    4. MySQL厳密モードを無効にする方法