ORACLE_查询blob字段中是否包含某个字符串/blob字段模糊匹配

要查询一个 BLOB 字段中是否包含某个字符串,可以使用 Oracle 的 DBMS_LOB.INSTR 函数。示例如下,

这里我们有2条记录,每条blob字段都有数据;其中第二条blob字段包含有字符串“T_NT_EndorsementBillEntry”,第一条记录没有

正常我们如下查询会报错:

对这个blob截取也会报这个错,这里我们可以使用如下方法,就可以找到有匹配的记录:

SELECT CASE
         WHEN DBMS_LOB.INSTR(fcontent,
                             utl_raw.cast_to_raw('T_NT_EndorsementBillEntry')) > 0 THEN
          'String found'
         ELSE
          'String not found'
       END AS tt,
       b.*
  FROM T_BAS_KSQLReport b
 where fname_l2 LIKE '%应收票据汇总%'

注意fcontent 是包含 BLOB 数据的列,T_NT_EndorsementBillEntry是您想要搜索的字符串。DBMS_LOB.INSTR 函数用于在 BLOB 数据中搜索指定的字符串,并返回它在 BLOB 中的位置。如果返回的位置大于 0,则表示字符串被找到了。

请注意,在使用 DBMS_LOB.INSTR 进行搜索时,您需要将搜索字符串转换为 RAW 格式,即使用 utl_raw.cast_to_raw 函数。这是因为 BLOB 数据是以字节形式存储的,而不是字符形式。

转化之后,我们就可以用下列查询方式去模糊匹配blob字段是否包含该字符串:

SELECT b.*
  FROM T_BAS_KSQLReport b
 where DBMS_LOB.INSTR(fcontent,
                      utl_raw.cast_to_raw('T_NT_EndorsementBillEntry')) > 0

 

 

posted @ 2024-02-06 16:32  凉了记忆  阅读(1077)  评论(0编辑  收藏  举报