SQL Replace()表连接仅替换尾随文本

时间:2013-08-04 02:25:43

标签: sql sql-server string replace

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

修改 我理解这个例子很奇怪,这只是我在解决THIS QUESTION时遇到的问题的一个例子

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

希望最终编辑 我将桌子从Hello World的变化改为Bacon&蛋。 在阅读了几次以确保我非常清楚问题是什么之后,我正在睁大眼睛。将源数据更改为更清晰。问题仍然存在我查了一下。

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

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

*Replacement Table*
Bacon       Pork                                       
Eggs        Poultry                                        

然后我有一个View进行交叉连接以执行替换,但它无法正常工作。这让我感到困惑,因为它似乎只替换了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            

对此问题的任何帮助或见解将不胜感激。 :)

1 个答案:

答案 0 :(得分:1)

好的,这很愚蠢/好笑。一位朋友问我是否使用TRIM()

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

事后看来,这是完美的感觉。只有TRAILING目标具有必需的尾随空格!