Tsql 比较两个字符串并获得匹配的-T SQL

Tsql 比较两个字符串并获得匹配的-T SQL,tsql,compare,Tsql,Compare,我想比较两个字符串,得到两个字符串共有多少个字符 例如: 我声明了一个值为Test1的变量。 使用select查询从表中获取值,并将其与变量进行比较,以从变量的第一个字符开始按顺序获取相同的字符数。 我将变量与查询中的值进行比较。 字符区分大小写,我使用大写字符串将select语句中的变量和值大写 我将选择最大编号的字符串。从输出图像中,我将选择Test1而不是Test11,因为Test11存在变量的字符数。 输出 有什么建议吗?您可以为此使用递归CTE 下一个问题:请不要发布图片。而是像我在这

我想比较两个字符串,得到两个字符串共有多少个字符

例如:

我声明了一个值为Test1的变量。 使用select查询从表中获取值,并将其与变量进行比较,以从变量的第一个字符开始按顺序获取相同的字符数。 我将变量与查询中的值进行比较。 字符区分大小写,我使用大写字符串将select语句中的变量和值大写 我将选择最大编号的字符串。从输出图像中,我将选择Test1而不是Test11,因为Test11存在变量的字符数。 输出


有什么建议吗?

您可以为此使用递归CTE

下一个问题:请不要发布图片。而是像我在这里所做的那样,尝试设置一个独立的、自运行的示例—DDL和INSERT

DECLARE @tbl TABLE(ID INT IDENTITY, SomeValue VARCHAR(100));
INSERT INTO @tbl VALUES ('Test1')
                       ,('Test11')
                       ,('Test')
                       ,('abc')
                       ,('Tyes')
                       ,('cest');
-这是我们用来比较大小写的字符串,取决于基础排序规则

DECLARE @CheckString VARCHAR(100)='Test1';
-询问

WITH recCTE AS
(
SELECT t.ID
      ,t.SomeValue
      ,1 AS pos
      --,SUBSTRING(@CheckString,1,1) AS LetterInCheckString
      --,SUBSTRING(t.SomeValue,1,1) AS LetterInTableValue
      ,CASE WHEN SUBSTRING(@CheckString,1,1)=SUBSTRING(t.SomeValue,1,1) THEN 1 ELSE 0 END AS IsTheSame
FROM @tbl t

UNION ALL

SELECT recCTE.ID
      ,recCTE.SomeValue
      ,recCTE.Pos+1
      --,SUBSTRING(@CheckString,recCTE.Pos+1,1) 
      --,SUBSTRING(recCTE.SomeValue,recCTE.Pos+1,1) 
      ,CASE WHEN SUBSTRING(@CheckString,recCTE.Pos+1,1)=SUBSTRING(recCTE.SomeValue,recCTE.Pos+1,1) THEN 1 ELSE 0 END 
FROM recCTE
WHERE recCTE.IsTheSame=1 AND SUBSTRING(@CheckString,recCTE.Pos+1,1) <>''
)
SELECT ID,SomeValue,SUM(IsTheSame)
FROM recCTE
GROUP BY ID,SomeValue
ORDER BY ID;
简而言之:

我们从递归的锚定位置=1开始 只要字符串相同,并且子字符串返回一个值,我们就将其添加进去。 结果是相同字符的总和。
老实说:T-SQL在这方面是错误的工具…

1。请将您的问题包括在内,并提供所需的结果。还包括您当前的代码。2.字符串中字符的位置重要吗?我是说,当比较佐哈和Zorah时,你认为3个字符匹配还是5个字符匹配?那么区分大小写呢?你认为Z等于Z吗?加上祖祖哈尔:那重复的呢?e、 佐罗和佐哈尔-有多少共同的角色?请提供样本数据和预期输出。只是一个一般性提示:如果用作字符串引擎,T-SQL非常糟糕……我将在一段时间内上传我所做的所有工作,包括样本数据。提前谢谢。@ZoharPeled question update.6行cest与Test1有三个字符的匹配,但您的结果显示为0。为什么?很好!我开始研究基于的解决方案,但逐个检查字符匹配可能最好使用递归cte处理+1@ZoharPeled我的第一个想法是一个带有计算出的TOP子句的理货表,并将其交叉应用于该表。这将允许对字符进行简单、位置安全的比较。但后来我看到了你对cest的评论和OP的回答:-感谢他们所有人的支持。谢谢。我将检查答案并提供反馈@Shnugo的输出似乎是正确的!如果你有时间,请提供一个更详细的解释,因为我是这个领域的新手。您建议用什么代替T-SQL?所有数据都存储在SQL server中?@Error1004,如果T-SQL是一个好的选择,则取决于数据量。任何真正的编程语言都能更好地处理这个问题。递归CTE的概念被描述和解释得很好,只要搜索这个。。。其思想是从选择并使用UNIONALL开始,使用隐藏的RBAR向该集合添加行。如果您需要更多详细信息,请回来,最好是针对特定问题提出新问题。