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