0

我正在寻找一种更好的方法来搜索 Oracle Text 中的数字范围。我有一个数据库应用程序,它做了很多 GIS 类型的事情,但我们现在想向它添加街道范围搜索。

所以我想将最小值和最大值存储在一列中,并在这些值中搜索一个数字。我很高兴去探索选项,但我想要一些关于去哪里的指示。有人对我有什么建议吗?

编辑:我们只是想让地址查找更容易。地址部分的文本取得了巨大的成功,但我们希望存储街道范围而不是每个单独的门牌号。所以,如果我搜索“11 high street”,如果 high street 的范围在 1 到 1000 之间,我会期望匹配。如果我搜索“flat 1 11 high street”,我还想要一些可以使用的选项“虽然也是。我希望在这些情况下我将不得不对输入做一些调整,我只是想知道我可以尝试使用哪些工具。

4

2 回答 2

2

我的建议是制作标准长度的字符串字段来存储建筑物编号,在该字段上创建索引,然后between用于搜索。

像这种格式的东西:

NNNNNNCCCCBBBB

在哪里:

NNNNNN- 左填充门牌号码;
CCCC - 左填充字符(如 '11A' 中的 'A');
BBBB - 左侧填充的建筑物编号

在“左填充”下,我的意思是“在左侧填充了一些标准长度的符号”,例如select lpad('11',5,'X') from dual;查询结果。

例如,假设您有“11A 大街 5 号楼”地址并选择“%”作为填充符号。当转换为建议的格式时,它看起来像'%%%11%%%A%%%'“大街”存储在单独的字段中。接下来是选择 1 到 1000 之间的所有房屋的查询示例:

with address_list as (
  select '%%%11%%%A%%%%' bnum from dual union all
  select '%1001%%%A%%%%' bnum from dual union all
  select '%%%%1%%%A%%%%' bnum from dual union all
  select '%%%%1%%%%%%%%' bnum from dual union all
  select '%%321%%%A%%%%' bnum from dual union all
  select '%1000%%%A%%%%' bnum from dual union all
  select '%1000%%QQ%%12' bnum from dual 
)
select * from address_list
where 
  -- from '1 high street'
  bnum >= '%%%%1%%%%%%%%' 
  and                    
  -- less then '1001 high street'            
  bnum < '%1001%%%%%%%%' 
order by 
  bnum

在实际情况下,最好使用chr(1)或任何其他不可打印的符号作为填充符号。

另一件事是只为搜索构建基于函数的索引,而不需要真正的字段存储。

于 2010-07-30T14:29:14.223 回答
2

有什么不妥

WHERE <number> BETWEEN minColumn AND maxColumn
于 2010-07-29T20:28:50.280 回答