代码之家  ›  专栏  ›  技术社区  ›  weismat

Informix SQL文本blob通配符搜索

  •  1
  • weismat  · 技术社区  · 16 年前

    我正在寻找一种有效的方法来使用通配符搜索 文本 (BLUB)柱。
    我已经看到它内部存储为字节… 数据量是有限的,但不幸的是,我的供应商决定使用这种愚蠢的数据类型。我也会考虑移动临时表中的所有内容,如果有一个简单的系统端函数来修改它-不幸的是,像rpad这样的东西不起作用…
    我可以通过使用Select部分中的列或通过Perl的DBI模块读取数据来正确地看到文本值。

    1 回复  |  直到 16 年前
        1
  •  4
  •   Jonathan Leffler    16 年前

    不幸的是,您被卡住了——您可以对文本或字节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.
    

    根据ID的版本,您可以选择BTS-基本文本搜索(需要IDSv11)或其他文本搜索数据刀片。另一方面,如果数据已经在数据库中,并且无法进行类型转换,那么可能会强制提取这些blob并在客户端搜索它们,这会降低效率。如果必须这样做,请确保尽可能多地过滤其他条件,以最小化所需的流量。

    您还可能注意到dbd::informix必须经过一些机器处理才能使blob看起来正常工作—坦率地说,不应该经过这些机器处理。到目前为止,经过十年的努力,我还没有说服人们这些事情需要解决。