0

OracleTextで数値範囲を検索するためのより良い方法を探しています。私は多くのGISタイプのことを行うDBアプリを持っていますが、今度はそれにストリートレンジ検索を追加したいと思います。

そこで、最小値と最大値を列に格納し、それらの値内の数値を検索したいと思います。私はオプションを探求することに満足していますが、どこに向かうべきかについてのいくつかの指針が欲しいです。誰かが私に何か提案がありますか?

編集:住所検索を簡単にしようとしているだけです。住所部分のテキストは大成功を収めていますが、個々の家番号ではなく、番地を保存したいと考えています。したがって、「11 high street」を検索した場合、ハイストリートの範囲が1〜1000であれば一致するはずです。また、「flat 1 11highstreet」を検索した場合に使用できるオプションもいくつかあります。 「でも。このような場合は、入力を少し調整する必要があると思います。どのようなツールを使用して試してみることができるかを知りたいだけです。

4

2 に答える 2

2

何か問題があります

WHERE <number> BETWEEN minColumn AND maxColumn
于 2010-07-29T20:28:50.280 に答える
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)、パディングのシンボルとして、またはその他の印刷できないシンボルを使用することをお勧めします。

もう1つのことは、実際のフィールドストレージなしで、検索用の関数ベースのインデックスのみを作成することです。

于 2010-07-30T14:29:14.223 に答える