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
linux下的docker操作命令及异常