SQL Replace()表联接仅替换尾部文本

SQL Replace()表联接仅替换尾部文本,sql,sql-server,string,replace,Sql,Sql Server,String,Replace,我使用的是.Net 2013,我相信它是与SQL Server版本打包在一起的 编辑: 我理解这个例子很奇怪,它只是我在制定解决方案时遇到的一个问题的一个例子 编辑2: 我的预期结果显然不是人们所期望的,所以我的预期结果更糟了。很抱歉给你带来了困惑 希望最终编辑 我把桌子从Hello World的变体换成了培根和鸡蛋。 在读了几遍这篇文章以确保我非常清楚问题是什么之后,我的眼睛开始斜视。将源数据更改为更清晰。问题依然存在。我查过了 我有两张桌子。 一个包含字符串的字符串。 一种包含要替换的字符串

我使用的是.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
请注意,仅替换文本的最后一半。 这不像是第一次更换,然后就停止了。这至少是有道理的。 从字面上看,这就像是出于某种原因,替换没有进行验证

查询结果(标有星号的问题)

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


如能对此问题提供任何帮助或见解,将不胜感激。:)

好吧,这很愚蠢/有趣。一位朋友问我是否在使用TRIM()


事后看来,这完全有道理。只有尾随目标才有必要的尾随空格

奇怪的是,当我在SSMS SQL Server 2008中运行您的精确查询时,它运行得很好。你能在你的数据中有一个看不见的字符,比如换行符吗?我不知道这怎么可能。实际上,我创建了上面的模型数据,并测试了我的查询,排除了除最基本变量以外的所有变量。上面的数据实际上是一个复制/粘贴。我推测,如果数据是从文件加载的,那么可能是将一个结束行字符捕获到表数据中,导致它只替换与换行符、ergo、第二个单词匹配的部分。如果您将查询更改为类似
SELECT DATALENGTH(InitialString)的内容,DATALENGTH(ReplacementTarget)、DATALENGTH(ReplacementValue).
您看到预期的长度了吗(培根为5等)?您使用的系统排序规则是否可能与我们使用的不同?这与预期的一样有效。
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            
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            
SELECT InitialString, ReplacementTarget, ReplacementValue, 
       REPLACE(InitialString, RTRIM(ReplacementTarget), RTRIM(ReplacementValue)) 
            AS ReplacedString
FROM   StringTable CROSS JOIN ReplacementTable