Tsql 比较两个字符串并获得匹配的-T SQL
我想比较两个字符串,得到两个字符串共有多少个字符 例如: 我声明了一个值为Test1的变量。 使用select查询从表中获取值,并将其与变量进行比较,以从变量的第一个字符开始按顺序获取相同的字符数。 我将变量与查询中的值进行比较。 字符区分大小写,我使用大写字符串将select语句中的变量和值大写 我将选择最大编号的字符串。从输出图像中,我将选择Test1而不是Test11,因为Test11存在变量的字符数。 输出Tsql 比较两个字符串并获得匹配的-T SQL,tsql,compare,Tsql,Compare,我想比较两个字符串,得到两个字符串共有多少个字符 例如: 我声明了一个值为Test1的变量。 使用select查询从表中获取值,并将其与变量进行比较,以从变量的第一个字符开始按顺序获取相同的字符数。 我将变量与查询中的值进行比较。 字符区分大小写,我使用大写字符串将select语句中的变量和值大写 我将选择最大编号的字符串。从输出图像中,我将选择Test1而不是Test11,因为Test11存在变量的字符数。 输出 有什么建议吗?您可以为此使用递归CTE 下一个问题:请不要发布图片。而是像我在这
有什么建议吗?您可以为此使用递归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向该集合添加行。如果您需要更多详细信息,请回来,最好是针对特定问题提出新问题。