You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Oracle SQL中匹配JSON字符串里第3次出现的指定关键词?

匹配JSON字符串中关键词第3次出现的思路

方法1:嵌套调用INSTR函数

INSTR函数支持指定起始搜索位置(第三个参数),可以通过多次嵌套定位第N次出现的位置:

  1. 先获取首次出现的位置,以此为起点,往后跳过关键词长度的位置开始找第二次;
  2. 再用第二次的位置+关键词长度作为起点,找第三次的位置。

假设你的关键词是'keyword',可以用以下SQL示例直接计算第三次出现的位置:

SELECT
  INSTR(json_string, 'keyword',
    -- 先找第二次出现的位置,再在此基础上偏移关键词长度
    INSTR(json_string, 'keyword', INSTR(json_string, 'keyword') + LENGTH('keyword'))
    + LENGTH('keyword')
  ) AS third_occurrence
FROM your_table;

其中LENGTH('keyword')可以自动获取关键词的长度,避免硬编码数字。

方法2:处理边界情况(关键词出现次数不足3次)

如果不确定JSON中关键词是否至少出现3次,可以先统计出现次数,再判断是否返回有效位置:

SELECT
  CASE
    WHEN REGEXP_COUNT(json_string, 'keyword') >= 3 THEN
      INSTR(json_string, 'keyword',
        INSTR(json_string, 'keyword', INSTR(json_string, 'keyword') + LENGTH('keyword'))
        + LENGTH('keyword')
      )
    ELSE 0 -- 次数不足时返回0或自定义值
  END AS third_occurrence
FROM your_table;

注:REGEXP_COUNT是多数数据库(如MySQL 8.0+、PostgreSQL、Oracle)支持的函数,用于统计正则匹配次数。

额外提示:考虑JSON结构的精准匹配

如果你的需求是精准匹配JSON中的键名或值(而非纯字符串片段),建议先通过数据库的JSON解析函数(如JSON_TABLE、JSON_EXTRACT)提取所有目标元素,再定位第3个元素的位置,避免误匹配JSON语法中的相同字符串(比如键名里的子串)。

内容的提问来源于stack exchange,提问作者Naseer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 02:05:20