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

如何使用Oracle REGEXP拆分含ID标识的长字符串?

Oracle正则表达式拆分长字符串实现方案

可以实现需求,利用Oracle的REGEXP_SUBSTR函数即可将长字符串拆分为独立语句并放入不同列,以下是具体实现方式:

核心思路

通过正则表达式匹配每个以句号(可选后续空格)结尾的独立语句,使用REGEXP_SUBSTR的捕获组提取语句内容,同时指定匹配位置来拆分出不同的语句列。

针对示例数据的SQL实现

处理Row1数据

SELECT
  REGEXP_SUBSTR(Row1, '([^.]+)\. ?', 1, 1, NULL, 1) AS 语句1,
  REGEXP_SUBSTR(Row1, '([^.]+)\. ?', 1, 2, NULL, 1) AS 语句2
FROM (
  SELECT 'van dam is brother of Prince Charles(12345). Mathew Perker is son of Prince Charles(12345).' AS Row1 FROM dual
);

执行后会得到两列结果,分别对应两个独立语句。

处理Row2数据

SELECT
  REGEXP_SUBSTR(Row2, '([^.]+)\. ?', 1, 1, NULL, 1) AS 语句1,
  REGEXP_SUBSTR(Row2, '([^.]+)\. ?', 1, 2, NULL, 1) AS 语句2,
  REGEXP_SUBSTR(Row2, '([^.]+)\. ?', 1, 3, NULL, 1) AS 语句3
FROM (
  SELECT 'Madam Currie is grandmother of Albert Eistine(56789). Pieer Currie is grandfather of Albert Eistine(56789). CV Raman is friend of Albert Eistine(56789).' AS Row2 FROM dual
);

执行后会得到三列结果,对应三个独立语句。

正则表达式说明

([^.]+)\. ? 的含义:

  • [^.]+:匹配除句号外的任意字符序列(即语句主体内容)
  • \.:匹配语句结尾的句号
  • ?:匹配句号后可选的空格
  • 通过REGEXP_SUBSTR的第6个参数指定提取第1个捕获组的内容,自动去除结尾的句号和空格。

从表中查询的通用写法

假设你的表名为target_table,包含id(对应括号内的数字)和long_content(存储长字符串的字段),可以直接扩展列来适配不同行数的语句数量:

SELECT
  id,
  REGEXP_SUBSTR(long_content, '([^.]+)\. ?', 1, 1, NULL, 1) AS statement_1,
  REGEXP_SUBSTR(long_content, '([^.]+)\. ?', 1, 2, NULL, 1) AS statement_2,
  REGEXP_SUBSTR(long_content, '([^.]+)\. ?', 1, 3, NULL, 1) AS statement_3
  -- 如需更多列,继续按此格式添加即可
FROM target_table;

对于语句数量不足的行,对应的列会返回NULL,符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 23:10:07