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

如何在Oracle SQL查询中提取字符串括号之间的内容

问题核心原因

你的正则匹配规则和实际字符串的括号类型不匹配。你写的正则\((.+)\)是用来提取**圆括号()包裹的内容,但示例中的目标内容是被方括号[]**包裹的,所以完全匹配不到结果。


正确实现方案

方括号在正则表达式中属于特殊元字符,需要加反斜杠转义才能匹配字符本身,推荐使用正则方案,适配内容长度不固定、多对括号等场景:

-- 写法1:非贪婪匹配,取第一对方括号内的内容
REGEXP_SUBSTR(mssg, '\[(.+?)\]', 1, 1, NULL, 1) AS "description" FROM book;
-- 写法2:排除法匹配,性能更稳定,不会出现贪婪匹配越界问题
REGEXP_SUBSTR(mssg, '\[([^\]]+)\]', 1, 1, NULL, 1) AS "description" FROM book;

substr写法修正

如果你坚持用substr+instr实现,需要修正括号类型和位置计算逻辑:

SUBSTR(
  mssg,
  INSTR(mssg, '[') + 1,
  INSTR(mssg, ']') - INSTR(mssg, '[') - 1
) AS "description" FROM book;

该写法仅适用于字符串中仅存在一对方括号的场景,灵活性不如正则方案。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 00:27:05