テキスト(blob)列でワイルドカード検索を使用する効率的な方法を探しています。
内部的にバイトとして保存されているのを見てきました...データ量は制限されますが、残念ながら私のベンダーはこのばかげたデータ型を使用することにしました。システム側で簡単に変更できる機能がある場合は、一時テーブル内のすべてを移動することも検討します-残念ながら、rpadのようなものは機能しません...
選択した部分の列を使用するか、 PerlのDBIモジュールを介してデータを読み取ります。
6489 次
1 に答える
4
残念ながら、行き詰まっています。TEXT または BYTE BLOB に対して実行できる操作はほとんどありません。特に、これらはどれも機能しません:
+ create table t (t text in table);
+ select t from t where t[1,3] = "abc";
SQL -615: Blobs are not allowed in this expression.
+ select t from t where t like "%abc%";
SQL -219: Wildcard matching may not be used with non-character types.
+ select t from t where t matches "*abc*";
SQL -219: Wildcard matching may not be used with non-character types.
IDS のバージョンによっては、BTS - Basic Text Search (IDS v11 が必要) またはその他のテキスト検索データ ブレードを使用できるオプションがあります。一方、データがすでに DB にあり、型変換できない場合は、ブロブを抽出してクライアント側で検索する必要があり、効率が低下します。それを行う必要がある場合は、必要なトラフィックを最小限に抑えるために、できるだけ多くの他の条件でフィルタリングするようにしてください。
また、DBD::Informix は、blob が機能しているように見せるためにいくつかの策略を実行する必要があることに気付くかもしれません。これまでのところ、10 年間の試みの中で、これらの問題を修正する必要があると人々を説得することはできませんでした。
于 2009-11-16T16:58:32.210 に答える