簡體   English   中英

如何對SQL Server表中的列進行最佳匹配?

[英]How to do bestmatch on a column in SQL Server table?

我有一個要在表的列中搜索電話號碼的要求。 電話號碼的長度恰好大於表中的長度。

在這種情況下,如何進行最佳匹配以獲取與電話號碼最匹配的列值?

您可以使用charindex來搜索您的searchvalue中是否存在列phone的值

select * 
from   MyTable t
where  charindex(t.phone, '0123456789') > 0

這將查找列電話內容位於“ 012345789”內的任何行

另一個選擇是使用全文搜索中的contains功能。
參見此處: https : //docs.microsoft.com/zh-cn/sql/t-sql/queries/contains-transact-sql?view=sql-server-2017

您可以實現Levenshtein distance之類的功能:

兩個單詞之間的距離是將一個單詞轉換為另一個單詞所需的最小單字符編輯(插入,刪除或替換)次數

有許多實現方法,它們在性能方面有所不同,請參見有關此方法的其他答案文章

例如 :

SELECT LEVENSHTEIN('0134227897', num) as distance , num
FROM   (VALUES ('0134752267'),
               ('+336709057'),
               ('+3347578974') ) AS t(num) 
order by distance

結果將是:

Distance   num  
5           +3347578974   
5           0134752267   
8           +336709057 

因此,最佳匹配是距離只有5的兩個數字

如果您想查找比其他電話號碼更長的電話號碼。 您可以找到比平均電話號碼長的電話號碼,如下所示:

SELECT phone_number
FROM my_tbl
WHERE LEN(phone_number) > (SELECT AVG(LEN(phone_number)) FROM my_tbl)

LEN查找VARCHAR字段的長度

AVG是一個匯總函數(將列表縮減為單個值的函數),用於計算列表/列的平均值


附言:我不確定要獲得價值的“最佳匹配”是什么意思。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM