gpt4 book ai didi

tsql - T-SQL获取2个字符串的字符匹配百分比

转载 作者:行者123 更新时间:2023-12-03 13:46:19 24 4
gpt4 key购买 nike

假设我有一组 2 个单词:

亚历山大和亚历山大或亚历山大和亚历山大

亚历山大和亚历山大,或任何其他组合。一般来说,我们谈论的是输入一个单词或一组单词时的人为错误。

我想要实现的是获得2个字符串的字符匹配百分比。

这是我到目前为止所拥有的:

    DECLARE @table1 TABLE
(
nr INT
, ch CHAR
)

DECLARE @table2 TABLE
(
nr INT
, ch CHAR
)


INSERT INTO @table1
SELECT nr,ch FROM [dbo].[SplitStringIntoCharacters] ('WORD w') --> return a table of characters(spaces included)

INSERT INTO @table2
SELECT nr,ch FROM [dbo].[SplitStringIntoCharacters] ('WORD 5')

DECLARE @resultsTable TABLE
(
ch1 CHAR
, ch2 CHAR
)
INSERT INTO @resultsTable
SELECT DISTINCt t1.ch ch1, t2.ch ch2 FROM @table1 t1
FULL JOIN @table2 t2 ON t1.ch = t2.ch --> returns both matches and missmatches

SELECT * FROM @resultsTable
DECLARE @nrOfMathches INT, @nrOfMismatches INT, @nrOfRowsInResultsTable INT
SELECT @nrOfMathches = COUNT(1) FROM @resultsTable WHERE ch1 IS NOT NULL AND ch2 IS NOT NULL
SELECT @nrOfMismatches = COUNT(1) FROM @resultsTable WHERE ch1 IS NULL OR ch2 IS NULL


SELECT @nrOfRowsInResultsTable = COUNT(1) FROM @resultsTable


SELECT @nrOfMathches * 100 / @nrOfRowsInResultsTable
SELECT * FROM @resultsTable将返回以下内容:
ch1         ch2
NULL 5
[blank] [blank]
D D
O O
R R
W W

最佳答案

最终,您似乎正在寻找解决两个字符串彼此“模糊”匹配的可能性。

SQL 提供了高效、优化的内置函数,可以为您做到这一点,并且可能具有比您编写的更好的性能。您正在寻找的两个函数是 SOUNDEXDIFFERENCE .

虽然他们都没有完全解决您的要求 - 即他们没有返回百分比匹配 - 我相信他们解决了您最终想要实现的目标。
SOUNDEX返回一个 4 字符代码,它是单词的第一个字母加上代表单词发音模式的 3 数字代码。考虑以下:

SELECT SOUNDEX('Alexander')
SELECT SOUNDEX('Alegzander')
SELECT SOUNDEX('Owleksanndurr')
SELECT SOUNDEX('Ulikkksonnnderrr')
SELECT SOUNDEX('Jones')

/* Results:

A425
A425
O425
U425
J520

*/

您会注意到,三位数字 425 对于所有听起来大致相似的数字都是相同的。所以你可以很容易地匹配它们并说“你输入了'Owleksandurr',你的意思是'Alexander'吗?”

此外,还有 DIFFERENCE函数,它比较 SOUNDEX两个字符串之间的差异并给它一个分数。
SELECT DIFFERENCE(  'Alexander','Alexsander')
SELECT DIFFERENCE( 'Alexander','Owleksanndurr')
SELECT DIFFERENCE( 'Alexander', 'Jones')
SELECT DIFFERENCE( 'Alexander','ekdfgaskfalsdfkljasdfl;jl;asdj;a')

/* Results:

4
3
1
1

*/

如您所见,分数越低(0 到 4 之间),字符串匹配的可能性就越大。
SOUNDEX的优势|超过 DIFFERENCE就是如果你真的需要做频繁的模糊匹配,你可以存储和索引 SOUNDEX数据在单独的(可索引的)列中,而 DIFFERENCE只能计算 SOUNDEX在比较的时候。

关于tsql - T-SQL获取2个字符串的字符匹配百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8518695/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com