1

area在 table中有一个字段property,在这个字段中记录保存在1-0-3-40-4-2-0等等。在每条记录中,第 1 代表最高面额的区域,第 2 代表次高,第 3 - 第三高和倒数,即第 4 代表区域的最低面额。格式x-x-x-x是在我们国家如何表示土地或财产的面积。

在上面的字段中搜索完全匹配不是问题,但如果我还必须显示最接近匹配的结果怎么办。像 , 1-0-3-3, 1-0-4-4,1-0-3-5是最接近的匹配1-0-3-4

可能吗?

谢谢

4

2 回答 2

2

这是可能的,但很混乱。如果您可以将“区域”字段标准化为单独的列,这将有所帮助 - 这将使解决方案更整洁、更快!

一个示例实现可能是:

select area, 1 as match_quality
from property
where area = '1-0-3-4'
union
select area, 2 as match_quality
from property
where area like '1-0-3-_' 
union
select area, 3 as match_quality
from property
where area like '1-0-_-4' 

这假设区域之间的距离对于给定列中的任何值都是相同的。如果不是这种情况,您可以通过检索代码(通过 SUBSTRING)并对其进行任何您需要的算术来改进它。

如果将 area 转换为单个列,这将变得更容易、更好、更快(上述联合中的最后一个查询会很慢,因为它不能有效地使用索引)。

例如:

select *, 1 as match_quality
from property
where area1 = 1
and area2 = 0
and area3 = 3
and area4 = 4
union 
select *, 2 as match_quality
from property
where area 1 = 1
and area 2 = 0
and area 4 = 4
union
select *, 3 as match_quality
from property
where area 1 = 1
and area2 = 0
and area4 = 4
于 2012-10-11T14:43:16.533 回答
1

也许substring会帮助你:

select * 
from property
where SUBSTRING(area,1,3)=SUBSTRING('1-0-3-4',1,3)
于 2012-10-11T14:29:45.157 回答