如何从Oracle Blob字段中选择子字符串

时间:2019-05-08 10:02:47

标签: oracle

我需要获取具有一些json数据的blob字段的一部分。斑点的一部分像这样CustomData:{HDFC;1;0;sent}。我需要在CustomData之后使用单独的值,就像我需要分别发送HDFC10一样。

这是我在两个有效的单独查询中尝试过的方法:

这使我在CustomData blob字段中索引payment_data,例如返回11000

select dbms_lob.instr(payment_data, utl_raw.cast_to_raw('CustomData')) 
from table_x;  

我将第三个参数指定为第一个查询返回的内容+测试时间CustomData:以获得{HDFC;1;0;sent}

select UTL_RAW.CAST_TO_VARCHAR2(dbms_lob.substr(payment_data,1000,11011)) 
from table_x; 

问题是我需要在第二个查询中使用动态偏移量,而不是单独运行第一个查询。指定动态偏移量不适用于dbms_lob.substr()函数。有什么建议可以将这两个查询合并为一个?

一旦获得{HDFC;1;0;sent},我还需要分别获取这些定界的值,因此,如果有人可以帮助将这三个定为一个更好。一旦将前两个结合起来,就可以使用regexp_substr来获取分隔的文本。

1 个答案:

答案 0 :(得分:0)

  1. 如果要先从blob中提取文本数据,则需要使用dbms_lob.converttoclob将其转换为clob。
  2. 如果您具有Oracle 12c或更高版本,则可以使用JSON SQL函数,例如JSON_TABLE
  3. 如果您的Oracle版本在10到11之间,则可以使用regex函数;如果版本小于10,则可以使用instr + substr。