在SQL或.NET中比较复杂字符串的最佳方法

时间:2010-08-24 22:48:12

标签: .net sql-server string

我觉得有点新手发布这个,但无论如何:

我有大量的库存商品,3000-5000具有复杂的名称,基于16年内输入物品的人,名称的例子是:

"Food, Dog, Pal Meaty Bites chunks 8kg bag"

另一个相关项目命名为:

"DOG FOOD: Meaty Bites (Pal) 22kg bag"

问题是我有许多供应商的物品清单,其中包含更新的价格,我需要将其与现有的库存清单相匹配。我第一次获得列表时,我想尝试进行“最接近匹配”搜索,并向用户显示我们当前库存项目名称的列表,该列表可能与供应商库存项目名称相匹配。然后,用户将选择正确的SKU,应用程序将导入供应商项目并链接到我们的Stock表PK。

供应商的名称也会有所不同。一个例子是:

"Pal Meaty Bites Chunks 8kg"

我可以在SQL或.NET中进行匹配,这是你推荐过的。我希望根据最大匹配关键字数量向用户显示尽可能少的项目。到目前为止,我的想法是:

在.Net中:进入数组并搜索每个项目的每个关键字(慢) 在SQL中:使用全文索引并使用带有截止值的“OR”返回列表将名称拆分为关键字

这一定是常见的情况,我只是不确定最好的方法。感谢您的投入!

编辑:添加了一些上下文: 我们有一个SKU表,它有大约20个字段,包括StockKeepingUnitID,这是唯一的PK(int标识)。供应商产品被拉入名为StockOrderUnit的表中,该表具有FID的SupplierID和StockKeepingUnitID,并且有一个名为SupplierCode(varchar)的字段,其中包含该库存项目的供应商唯一代码。问题是许多供应商向我们发送价格表,并且由用户将供应商项目(此时未知)与数据库中的现有SKU相匹配。一旦他们选择了一个,就会加入记录。

3 个答案:

答案 0 :(得分:3)

肯定把它带回客户端代码,而不是DB。如您所说,这将允许您创建匹配的得分,并允许用户选择/确认您的自动匹配。

我将通过拆分成数组,转换为小写,然后按字母顺序排序来解决它。也许尝试将带有数字的术语移动到数组的前面。将它全部拉回到一个字符串中,以帮助用户识别匹配,并保持一致性。

我毫不犹豫地在SQL脚本中自动执行此操作,无需用户监督。也许用户可以获得分数,只需要判断那些低于阈值的人。

答案 1 :(得分:1)

可以使用SQL关键字LIKE进行此类搜索。

select fld1, fld2 from ProductTable where fld1 LIKE '%Meaty Bites%';

请原谅我,如果你已经有一个,但如果你没有SKU(库存单位) 系统为人类的爱创造一个。至少创建一个唯一的主键,自动递增(标识)并将其应用于您的所有记录。然后使用它来进行查找等。

使用'like',可以获得更少的记录,而且您不必编写大量代码来完成工作。

答案 2 :(得分:1)

你可以采取两种方法 拆分并在SQL中进行一些基本匹配 然后在.Net

中对结果进行评分

您在SQL中的基本匹配可以像包含大量单词的所有内容的大型列表一样简单。

然后你在.Net中的得分就会发生真正的“魔法”。