我有一个要求,我要在表的一列中搜索电话号码。电话号码的长度恰好大于表中的长度。
在这种情况下,如何进行最佳匹配以获取与我的电话号码最匹配的列值?
答案 0 :(得分:1)
您可以使用charindex来搜索列G
的值是否存在于您的搜索值中
true
这将找到列电话内容位于“ 012345789”内的任何行
另一种选择是使用全文搜索中的bool HasGreen(int tolerance)
{
using (var bmp = new Bitmap(Image.FromFile(@"c:\file.bmp")))
{
for (int w = 0; w < bmp.Width; w++)
for (int h = 0; w < bmp.Height; h++)
if (IsGreenPixel(bmp.GetPixel(w, h), tolerance))
return true;
}
return false;
}
bool IsGreenPixel(Color color, int tolerance)
=> color.G > color.R + tolerance && color.G > color.B + tolerance;
功能。
看到这里:https://docs.microsoft.com/en-us/sql/t-sql/queries/contains-transact-sql?view=sql-server-2017
答案 1 :(得分:1)
您可以实现类似Levenshtein distance的功能:
两个单词之间的距离是单个字符的最小数量 更改一项所需的编辑(插入,删除或替换) 话到另一个
有许多实现方法,它们在性能方面有所不同,有关此方法,请参见other answers和article
例如:
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个距离的两个数字
答案 2 :(得分:0)