0

私は.Net 2013を使用しています.Net 2013は、SQL Serverのバージョンにパッケージ化されていると思います。

編集:例がかなり奇妙であることは理解しています。これは、この質問 の解決策を検討しているときに発生した問題の単なる例です。

編集 2:
私の予想される結果は明らかに人々が期待しているものではないため、下に追加します。混乱させて申し訳ありません。

できれば最終編集 で、テーブルを Hello World のバリエーションから Bacon & Eggs に変更しました。これを数回読んで問題が何であるかを明確にした後、私は斜視になりました. ソース データを読みやすく変更しました。問題が残っています。私がチェックしました。

私は2つのテーブルを持っています。文字列を含むもの。置換される文字列とその置換を含むもの。

*String Table*
Bacon
Eggs
Bacon & Eggs                                        
Eggs & Bacon                                        

*Replacement Table*
Bacon       Pork                                       
Eggs        Poultry                                        

次に、クロス結合を実行して置換を実行するビューがありますが、正しく機能していません。END の文字列のみを置き換えるように見えるため、これには困惑しています。以下のクエリ結果を参照してください。

SELECT  InitialString, ReplacementTarget, ReplacementValue, 
        REPLACE(InitialString, ReplacementTarget, ReplacementValue) 
            AS ReplacedString
FROM    StringTable CROSS JOIN ReplacementTable

テキストの後半のみが置き換えられることに注意してください。最初の交換が行われ、その後停止するわけではありません。それは少なくとも理にかなっています。これは文字通り、何らかの理由で置換が検証されていないようなものです。

クエリの結果 (アスタリスクでマークされた問題)

InitialString   ReplaceTarget  ReplaceValue     ReplacedString
Bacon           Bacon          Pork             Pork                    
Eggs            Bacon          Pork             Eggs                    
Bacon & Eggs    Bacon          Pork             Bacon* & Eggs            
Eggs & Bacon    Bacon          Pork             Eggs & Pork             
Bacon           Eggs           Poultry          Bacon                   
Eggs            Eggs           Poultry          Poultry                 
Bacon & Eggs    Eggs           Poultry          Bacon & Poultry         
Eggs & Bacon    Eggs           Poultry          Eggs* & Bacon            

. 期待される結果 (YES, I WANT 8 ROWS BACK. SEE LINK ABOVE) (アスタリスクで示される変更)

InitialString   ReplaceTarget  ReplaceValue     ReplacedString
Bacon           Bacon          Pork             Pork                    
Eggs            Bacon          Pork             Eggs                    
Bacon & Eggs    Bacon          Pork             Pork* & Eggs            
Eggs & Bacon    Bacon          Pork             Eggs & Pork             
Bacon           Eggs           Poultry          Bacon                   
Eggs            Eggs           Poultry          Poultry                 
Bacon & Eggs    Eggs           Poultry          Bacon & Poultry         
Eggs & Bacon    Eggs           Poultry          Poultry* & Bacon            

.

この問題に関するヘルプや洞察をいただければ幸いです。:)

4

1 に答える 1

1

OK、これはかなりばかげています/面白いです。友人が TRIM() を使用しているかどうか尋ねました

SELECT InitialString, ReplacementTarget, ReplacementValue, 
       REPLACE(InitialString, RTRIM(ReplacementTarget), RTRIM(ReplacementValue)) 
            AS ReplacedString
FROM   StringTable CROSS JOIN ReplacementTable

後から考えると、完全に理にかなっています。TRAILING ターゲットだけが必要な末尾スペースを持っていました!

于 2013-08-05T19:20:02.837 に答える