首页 > 数据库 >ORACLE_查询blob字段中是否包含某个字符串/blob字段模糊匹配

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

时间:2024-02-06 16:46:11浏览次数:22  
标签:LOB DBMS raw 字符串 字段 blob ORACLE

要查询一个 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

 

 

标签:LOB,DBMS,raw,字符串,字段,blob,ORACLE
From: https://www.cnblogs.com/ketoli/p/18009948

相关文章

  • Oracle-创建用户不带C##(19c)
    由于oracle从12c开始引入了容器(PDB和CDB)、租户的概念。直接连接sysdba用户创建新用户时,会默认在CDB中创建公有用户,用户名需要以“C##”或“c##”开头。如果用户名开头不想使用“C##”或“c##”,则需要做如下操作。 (1)使用sysdba管理员用户登录sqlplus/assysdba (2)查看数据......
  • Oracle-显示问号或者乱码
    问题描述:通过sqlplus登录Oracle19c时,执行SQL出现报错时,显示错误码出现问号:解决方法:su  - oracle  vi.bash_profile 添加如下一行内容:exportNLS_LANG=AMERICAN_AMERICA.AL32UTF8然后是环境变量生效source  .bash_profile  ......
  • Oracle index domain R-tree(B-tree extension)
    *[构建域索引](https://docs.oracle.com/en/database/oracle/oracle-database/19/addci/building-domain-indexes.html#GUID-E370B5E4-BAC0-49C6-B17D-830B3A507FB4)域索引是为专用域(如空间或图像处理)设计的索引。用户可以在设计器创建索引类型后生成给定类型的域索引。域索引的......
  • Linux下Oracle启用
    1,Linux切换到Oraclesu-oracle2,使用sqlplus并以管理员的身份登录sqlplus/assysdba3,开启cbdstartup4,开启pdbalterpluggabledatabaseORA19CPDBopen;ORA19CPDB为pdb的名字,可以通过showpdbs查看5,退出sqlplusexit6,打开监听lsnrctlstart7,......
  • oracle常用sql
    --备份tbluser的数据到tbluser_bak中createtabletbluser_bakasselect*fromtbluser;--此处不加as也行--删除备份表的数据truncatetabletbluser_bak;--还原表数据insertintotbluser_bakselect*fromtbluser;--查看数据是否恢复select*fromtbluser_bak;-......
  • Oracle-修改字段类型方法总结
    有一个表名为test,字段段名为name,数据类型nchar(20)。1、假设字段数据为空,则不管改什么字段类型,可以直接执行:altertabletestmodify(namenvarchar2(20));2、假设字段有数据,这时再来修改表的字段类型就无法修改:altertabletestmodify(namenvarchar2(20));3、假设字段有数据,......
  • 非空处理 Java非空判断 非空处理及mysql数据库字段的not null
    1.mysql##去掉非空,如果非空又没有默认值,这样程序在添加数据的时候i,如果没有设置值就会报错。该操作很危险。##ALTERTABLE`order_test`ADDCOLUMN`test_card_name`NOTNULLVARCHAR(200)COMMENT'卡名称';##修改允许为空..ALTERTABLE`order_test`MODIFYCOLUMN`test......
  • Oracle向数据库插入日期格式数据
    插入系统日期insertintostudent(sno,sname,birthdate)values(007,'omit',sysdate);插入Oracle数据库指定格式的日期insertintostudent(sno,sname,birthdate)values(008,'Ding','18/11月/2022');使用todate()插入其他格式的日期(最常用)insertintostudent(sno,sname,......
  • ORACLE_sql中后相似下划线“_”没有匹配生效
    在oracle中我想查出库中所有表名类似“T_BD_ACCOUNTVIEW_QX_”的记录,用sql语句查询如下,得到结果却不一样,SELECTtable_nameFROMuser_tablesuwhereu.table_namelike'T_BD_ACCOUNTVIEW_QX_%';结果如下: 很显然,最后一个横杠没有匹配生效,查询后才知道,在Oracle中,下划线......
  • ORACLE:ORA-00933错误,SQL命令不正确结束
    什么是ORA-00933错误ORA-00933错误是Oracle数据库中常见的SQL错误之一。它表示SQL命令在语法上或结构上没有正确结束,导致解析错误。该错误通常会在执行SQL语句时发生,导致查询无法正常执行。ORA-00933错误的常见原因ORA-00933错误可能由以下几个原因引起: 缺少或多余的分号(;):......