检查clob是否包含字符串oracle

Mas*_* Yi 9 sql oracle clob

目前我有这个代码的查询,to_char(CLOB_COLUM) like %s但以下不适用于非常大的clob.是否有另一种解决方案来检查此列是否包含某些字符串.使用oracle 11.2.0.4.0

MT0*_*MT0 13

你可以使用DBMS_LOB.INSTR( clob_value, pattern [, offset [, occurrence]] ):

SELECT *
FROM   your_table
WHERE  DBMS_LOB.INSTR( clob_column, 'string to match' ) > 0;
Run Code Online (Sandbox Code Playgroud)

要么

SELECT *
FROM   your_table
WHERE  clob_column LIKE '%string to match%';
Run Code Online (Sandbox Code Playgroud)

  • 第一个工作,第二个不工作过去也尝试过这种方法,不知道为什么,但我认为第二个看起来只像 to_char 前 4000 个字符 (2认同)

ala*_*9uo 5

根据MT0的回答。我测试一下哪种方式有效。

CLOB长度为155018,搜索32 长度字符串。

这是我的测试。

| INSTR  | LIKE  |
|:-------|------:|
| 0.857  |0.539  |
| 0.127  |0.179  |
| 1.635  |0.534  |
| 0.511  |0.818  |
| 0.429  |1.038  |
| 1.586  |0.772  |
| 0.461  |0.172  |
| 0.126  |1.379  |
| 1.068  |1.088  |
| 1.637  |1.169  |
| 0.5    |0.443  |
| 0.674  |0.432  |
| 1.201  |0.135  |
| 0.419  |2.057  |
| 0.731  |0.462  |
| 0.787  |1.956  |
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

INSTR的平均时间 为 0.797。

LIKE的平均时间 为 0.823。