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

列の値全体を検索して置換するSQLServer

    正しく理解できたと思います。繰り返します。

    1. エントリがたくさんあるテーブルが1つあります
    2. 「検索列」を検索するExcelのこのリストがあります
    3. 一致する場合は、値全体を「列の置換」に置き換えます

    この場合、これが解決策になる可能性があります:

    declare @data table (Column1 nvarchar(50))
    
    insert  into @data
            (Column1)
    values  (N'RbC investment for Seniors 65+'),
            (N'RBC inv for juniors')
    
    declare @replace table
        (
         OriginalValue nvarchar(50),
         NewValue nvarchar(50),
         [priority] int
        )
    
    insert  into @replace
            (OriginalValue, NewValue, [priority])
    values  (N'rbc inv', N'RBC dominion securities', 2),
            (N'rbc dom', N'RBC dominion securities', 2),
            (N'RBC', N'RBC Bank', 3)
    
    update  @data
    set     Column1 = coalesce((
                                select top 1
                                        NewValue
                                from    @replace
                                where   Column1 like '%' + OriginalValue + '%'
                                order by [priority]
                               ), Column1)
    
    select  *
    from    @data
    

    テーブル「データ」は、置換を行うテーブルになります。

    これを使用すると、かなりの副作用が発生する可能性があります(たとえば、「search_column」の%のようなワイルドカード、複数の一致-現在、「ランダム」なものが使用され、パフォーマンスが最高ではない可能性があります...)より正確な答えには、より良い質問が必要です。

    編集:

    ラルフのおかげで...重複した一致を処理できるように、「置換」テーブルに優先順位を追加しました。

    「RBC」の優先度が3の場合、結果は次のようになります。

    優先度1の場合:




    1. 開始日と終了日に基づいて日間隔を含めて複数回レコードを表示する方法

    2. MySQLは外部キー列に自動的にインデックスを付けますか?

    3. MySQLに一連の画像を保存するための最良の方法は何ですか?

    4. SQLServerの現在のセッションの日付形式を変更する