代码之家  ›  专栏  ›  技术社区  ›  gbjbaanb

Oracle文本搜索范围

  •  0
  • gbjbaanb  · 技术社区  · 14 年前

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

    所以我想将最小值和最大值存储在一列中,并在这些值中搜索一个数字。我很乐意去探索各种选择,但我想知道该往哪里走。有人对我有什么建议吗?

    2 回复  |  直到 11 年前
        1
  •  2
  •   ThinkJet    14 年前

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

    NNNNNNCCCCBBBB
    

    哪里:

    NNNNNN
    CCCC -左填充字符(如“11A”中的“A”);
    BBBB -左填充建筑编号

    select lpad('11',5,'X') from dual; 查询。

    例如,假设您有“11A high street building 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) 或任何其他不可打印的符号作为填充符号。

    另一件事是只为搜索建立基于函数的索引,而不使用实字段存储。

        2
  •  2
  •   Mark Baker    14 年前

    WHERE <number> BETWEEN minColumn AND maxColumn