2

我有一个结构如下的表:

address_number  address_street  address_town  address_county  address_postcode

网站上有一个搜索框,人们可以在其中输入部分地址,我需要根据他们提交的信息确定如何返回准确的结果,但是邮政编码的存储方式有一些复杂性:BN2 1HN 和address_number可以小到只有 1 个字符。

我尝试CONCAT将地址字段放在一起并将其与输入进行比较,但没有一个有效,我还尝试使用LIKE循环遍历表中的每个字段,但这一点都不令人满意。理想情况下,我希望首先返回最准确的结果,但我很欣赏这只能用MATCH AGAINST.

任何帮助将不胜感激,如果您有 PayPal 捐赠按钮(提供礼仪允许这样做?),您将获得明确的答案。这是我的第一个问题,因为我很固执,通常喜欢自己解决这些问题。

4

1 回答 1

0

由于提到了

MATCH(col1,col2) ... AGAINST(expr)

但这是一种使用 LIKE 的方法,它可能对 SQL Server 有所帮助:

/*
CREATE TABLE tab1 (address_number VARCHAR(10),  address_street VARCHAR(50), 
address_town VARCHAR(50),  address_county VARCHAR(50),  address_postcode VARCHAR(50))
INSERT INTO tab1 VALUES ('100','Queen Street','Winchester','Hartford','XYZ 123')
INSERT INTO tab1 VALUES ('10','Downing Street','London','','XYZ 124')
--*/
SELECT * FROM Tab1
WHERE (address_number+' '+address_street+' '+address_town+' '+address_county
+' '+address_postcode + ' '+replace(address_postcode,' ','')/*remove blank*/
) LIKE '%100 QUEEN%'

要像 google 一样,您需要尝试对用户输入的内容进行多种变体,并根据地址是否以用户输入的内容开头、是否包含字面内容等来排序。

于 2013-04-02T18:28:49.777 回答