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

Oracle SQL 如何提取方括号内逗号分隔值并拆分plate字段为4个独立列

Oracle SQL 拆分固定格式方括号包裹的逗号分隔字段

针对plate字段存储的固定格式字符串(规则为方括号包裹、内部4个逗号分隔的数值,示例:[1,2,3,4]),可根据场景选型两种实现方案,无需编写复杂的递归拆分逻辑。

方案1:纯字符串截取实现(固定格式大表推荐)

无正则运算,全为Oracle基础字符串函数,执行效率更高,适合全量扫描大表的场景:

SELECT
  -- 第一列值
  SUBSTR(
    TRIM(BOTH '[]' FROM plate),
    1,
    INSTR(TRIM(BOTH '[]' FROM plate), ',', 1, 1) - 1
  ) AS val1,
  -- 第二列值
  SUBSTR(
    TRIM(BOTH '[]' FROM plate),
    INSTR(TRIM(BOTH '[]' FROM plate), ',', 1, 1) + 1,
    INSTR(TRIM(BOTH '[]' FROM plate), ',', 1, 2) - INSTR(TRIM(BOTH '[]' FROM plate), ',', 1, 1) - 1
  ) AS val2,
  -- 第三列值
  SUBSTR(
    TRIM(BOTH '[]' FROM plate),
    INSTR(TRIM(BOTH '[]' FROM plate), ',', 1, 2) + 1,
    INSTR(TRIM(BOTH '[]' FROM plate), ',', 1, 3) - INSTR(TRIM(BOTH '[]' FROM plate), ',', 1, 2) - 1
  ) AS val3,
  -- 第四列值
  SUBSTR(
    TRIM(BOTH '[]' FROM plate),
    INSTR(TRIM(BOTH '[]' FROM plate), ',', 1, 3) + 1
  ) AS val4
FROM your_target_table;

方案2:正则表达式提取实现(代码简洁度优先)

写法更短,可读性更强,遇到格式不匹配的脏数据会自动返回NULL,方便排查异常:

SELECT
  REGEXP_SUBSTR(plate, '\[([^,]*),([^,]*),([^,]*),([^,]*)\]', 1, 1, NULL, 1) AS val1,
  REGEXP_SUBSTR(plate, '\[([^,]*),([^,]*),([^,]*),([^,]*)\]', 1, 1, NULL, 2) AS val2,
  REGEXP_SUBSTR(plate, '\[([^,]*),([^,]*),([^,]*),([^,]*)\]', 1, 1, NULL, 3) AS val3,
  REGEXP_SUBSTR(plate, '\[([^,]*),([^,]*),([^,]*),([^,]*)\]', 1, 1, NULL, 4) AS val4
FROM your_target_table;

方案说明:正则逻辑通过4个捕获组分别匹配方括号内、被逗号分隔的4个独立值,调用REGEXP_SUBSTR时指定捕获组序号即可直接提取对应值,不需要手动计算字符串位置。如果后续格式规则调整(比如分隔值个数变化),只需要调整正则的捕获组数量即可,灵活性更高。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 23:54:03