如何在clob中查找具有另一个字符串作为其前缀的特定字符串

时间:2017-05-05 06:21:30

标签: sql oracle

让我用一个例子说明我需要的东西。

假设我的表有两列,第一列是主键,第二列是CLOB。

假设我表中的clob列包含以下数据:

Method_name : Test_method_124

Grading: As Specified

Grading Time Period: 2016 Fall

我想找到'评分时间段'之后的字符串。我的查询的输出应该是主键(即表的第一列)和'2016 Fall'

1 个答案:

答案 0 :(得分:0)

使用DBMS_LOB函数处理CLOB。 instr()返回CLOB中搜索模式的起始偏移量。 substr()返回一个子字符串,它是CLOB中给定偏移量的 n 个字符。 Find out more

SQL> select id,
  2        dbms_lob.substr(txt, 30, dbms_lob.instr(txt,'Grading Time Period')+21) as snippet
  3  from t23
  4  where dbms_lob.instr(txt, 'Grading Time Period') > 0:

        ID SNIPPET
---------- ----------
         1 2016 Fall

SQL> 

这是一种存储数据的糟糕方式。实际上,这应该适当地规范化为表格列。但即使是XML或JSON也是处理这种情况的更好方法。以这种方式看待它。如果要提取Grading,您将如何指定缓冲区以确保仅抓取As Specified?这是可能的,但它很粗糙。