我正在寻找一种在文本(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 - 基本文本搜索(需要 IDS v11)或其他文本搜索数据刀片。另一方面,如果数据已经在数据库中并且无法进行类型转换,那么您可能会被迫提取 blob 并在客户端搜索它们,这样效率会降低。如果您必须这样做,请确保您过滤尽可能多的其他条件,以尽量减少所需的流量。
您可能还注意到 DBD::Informix 必须经历一些诡计才能使 blob 看起来有效——坦率地说,它不应该经历的诡计。到目前为止,在十年的尝试中,我还没有说服人们这些东西需要修复。
于 2009-11-16T16:58:32.210 回答