【发布时间】:2012-11-22 13:07:39
【问题描述】:
我在移动设备上有一个带有 sqlce 数据库的 c# 应用程序。
在数据库中有一张大表,我想在其中搜索城市或地址的名称。问题是,城市名称来自不同的来源,或者是由不同的人插入的,因此城市包含例如 Saint XXX, St. YYY 和 St ZZZ。
在我的搜索中,我搜索 fpr St XXX 还是 Saint XXX 都无关紧要。结果应该是一样的
当然这个问题不仅仅出现在Saint这个词上,它只是一个例子。我还不知道多少,但会有很多不同的术语。
我有一些方法,比如替换
SELECT REPLACE(REPLACE(name,'St.','Saint'),'St','Saint') FROM cities WHERE name = REPLACE(REPLACE(@SearchTerm,'St.','Saint'),'St','Saint')
但性能很差。
另外,SoundEx 并没有真正给出我需要的结果,因为 Saint 和 St 听起来根本不相似。
城市名称来自外部数据源(通过合并复制),因此我无法在服务器上更新它们,也不想更新城市名称,但可以使用它们,因为它们存储在数据库中。
如何进行搜索以满足我的需求?
【问题讨论】:
-
Select name FROM city WHERE name like '%' + @SearchTerm
-
如果用户从未输入过像圣彼得堡这样的东西,而只输入了彼得堡,这将起作用。但他应该可以进入圣彼得堡,圣彼得堡或圣彼得堡
-
这将是一个技巧,你可以用空格('')分割你的搜索字符串并检查第 0 个位置的字符串是(St. 或 Saint 或 St),如果是,则忽略该字符串并发送查询字符串的其余部分并使用此查询
Select name FROM cities WHERE name like '%' + @SearchTerm + '%' -
是的。我可以使用带有
bad strings的字典并自动创建我的SearchTerm。听起来不错。谢谢 -
别忘了投票,如果它对你有帮助....:-)
标签: c# sql search compact-framework sql-server-ce