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 @   凉了记忆  阅读(1256)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
历史上的今天:
2023-02-06 EAS获取用户对象userInfo
点击右上角即可分享
微信分享提示