SQL替换()表的连接只替换结尾文本(SQL Replace() table join only r

2019-11-02 08:46发布

我使用的.Net 2013,我相信来包装的一个版本的SQL Server。

编辑:我理解的例子是相当奇怪的,它只是在工作时出了一项决议,我遇到了一个问题的说明这个问题

编辑2:
我预期的结果显然不是人们所期待,因此增加了底部。 对困惑感到抱歉。

希望最终编辑我从培根和鸡蛋的Hello World的变化改变了表。 这种读几次,以确保后,我对这个问题是什么,我会斗鸡眼很清楚。 改变了源数据要更加清晰可辨。 问题仍然存在。 我检查了。

我有两个表。 其中含有的字符串。 要被替换包含字符串之一,以及其置换。

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

*Replacement Table*
Bacon       Pork                                       
Eggs        Poultry                                        

然后,我有一个观点,即不交叉联接进行更换,但它不能正常工作。 这我感到困惑,因为它似乎只替换在结束的字符串。 请参阅下面的查询结果。

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个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            

任何帮助或洞察到这一问题将不胜感激。 :)

Answer 1:

OK,这是非常愚蠢/滑稽。 有朋友问我是不是使用TRIM()

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

非常有意义,在事后。 只有尾随目标有必要的尾随空格!



文章来源: SQL Replace() table join only replaces trailing text