让我用一个例子说明我需要的东西。
假设我的表有两列,第一列是主键,第二列是CLOB。
假设我表中的clob列包含以下数据:
Method_name : Test_method_124
Grading: As Specified
Grading Time Period: 2016 Fall
我想找到'评分时间段'之后的字符串。我的查询的输出应该是主键(即表的第一列)和'2016 Fall'
答案 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
?这是可能的,但它很粗糙。