【问题标题】:Does the LOCATE() function in DB2 have a limit to its length?DB2 中的 LOCATE() 函数是否有长度限制?
【发布时间】:2021-07-24 03:40:00
【问题描述】:

我正在尝试在一个非常大的文本字段(例如 1 亿个字符大)中搜索文本字符串。 Select locate(LT.LARGE_TEXT, 'text to find') from LARGE_TEXT LT 是我试过的查询。 locate 函数给我一个错误:

SQLFetch 22001(-433)[IBM][CLI 驱动程序][DB2/LINUXX8664] 期间出错 SQL0433N 值“

文本域本质上是存储一个完整的json文件,我需要在里面找到某些东西。

【问题讨论】:

  • 似乎找到的行太长了。测试select count(*) from ... where locate() ...
  • 请包含实际产生错误的 SQL 查询。听起来您正在尝试将 JSON 文本返回给您的客户端,而客户端驱动程序无法处理 100MB+ 是单行中的单列。但是,由于您没有包含查询,我们只是猜测。
  • 您的意思是在 where 子句中使用 Locate() 吗?就像查询是 Select count(*) from Table where locate(columnname, 'text to find') > 0?我不太明白。
  • Select locate(LT.LARGE_TEXT, 'text to find') from LARGE_TEXT LT 是我试过的查询
  • 我相信 Locate 适用于长度不超过 32k 的字符串类型。 CLOB 可能比这大得多,您需要改用 DBMS_LOB.INSTR。

标签: sql db2 locate


【解决方案1】:

有两个问题。首先,您似乎颠倒了函数参数。根据reference documentation,调用是

LOCATE(<search-string>, <source-string> [, <start> [CODEUNITS16|CODEUNITS32|OCTETS]])

其次,&lt;search-string&gt;&lt;source-string&gt; 参数的类型都是 VARCHAR 或转换为 VARCHARVARCHAR 具有 maximum length of 32672 bytes。按照 cmets 中的建议,您应该使用 DBMS_LOB.INSTR function

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多