我正在寻找一种在文本(blob)列上使用通配符搜索的有效方法。
我已经看到它内部存储为字节...
数据量将受到限制,但不幸的是我的供应商决定使用这种愚蠢的数据类型。如果有一个简单的系统端函数来修改它,我还会考虑将所有内容都移到临时表中 - 不幸的是像rpad这样的东西不起作用...
通过使用选择部分中的列或通过Perl的DBI模块读取数据,我可以正确地看到文本值。
答案 0 :(得分: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看起来有效 - 坦白说,它不应该经历过这种阴谋。到目前为止,在十年的尝试中,我并没有说服人们这些事情需要修复。