2009-11-16 44 views
1

我正在尋找一種在文本(blob)列上使用通配符搜索的有效方法。
我看到它在內部存儲爲字節... 數據量將受到限制,但不幸的是我的供應商已決定使用這種愚蠢的數據類型。如果有一個簡單的系統側功能來修改它,我還會考慮將所有內容都移動到臨時表中 - 不幸的是像rpad這樣的東西不起作用...
通過使用select部分中的列,我可以正確地看到文本值或者通過Perl的DBI模塊讀取數據時。Informix SQL文本Blob通配符搜索

回答

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選項 - 基本文本搜索(需要IDS V11),或與其他文本搜索數據刀片。另一方面,如果數據已經存在於數據庫中,並且無法進行類型轉換,那麼您可能會被迫提取blob並在客戶端搜索它們,效率較低。如果您必須這樣做,請確保您儘可能多地過濾其他條件,以儘量減少所需的流量。

您可能還會注意到,DBD :: Informix必須通過一些詭計才能使Blob看起來像工作 - 它不應該,非常坦率地說,必須通過的陰謀。到目前爲止,在十年的嘗試中,我沒有說服人們這些事情需要解決。

+0

我決定將數據移動到第二個表中,將BLOB轉換爲vchar格式並將結果存儲到單獨的列中。謝謝你的幫助。 – weismat 2009-11-17 06:59:11