0

我正在使用 .Net 2013,我相信它与 SQL Server 版本一起打包。

编辑: 我知道这个例子很奇怪,它只是说明我在解决这个问题时遇到的一个问题

编辑 2:
我的预期结果显然不是人们所期望的,所以添加到底部。对困惑感到抱歉。

希望最终编辑 我将表格从 Hello World 的变体更改为 Bacon & Eggs。在阅读了几次以确保我非常清楚问题是什么之后,我开始眼花缭乱了。将源数据更改为更清晰。问题依然存在。我检查了。

我有两张桌子。一个包含字符串。一个包含要替换的字符串,以及它的替换。

*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            

. 预期结果(是的,我想要 8 行返回。请参阅上面的链接) (用星号表示的更改)

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

好的,这很愚蠢/有趣。一位朋友问我是否使用 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 回答