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

如何用Oracle正则表达式提取字符串字段的第三个单词

正则提取字符串第三个单词的实现方案

核心正则规则

我们需要跳过前两个由空白分隔的单词,捕获第三个单词,核心正则表达式如下:
^\S+\s+\S+\s+(\S+)
各部分含义:

  • ^:锚定字符串起始位置,确保从第一个字符开始匹配
  • \S+:匹配1个及以上非空白字符,对应单个单词
  • \s+:匹配1个及以上空白字符(兼容空格、制表符等分隔符,也支持多个空格分隔的场景)
  • ():捕获组,括号内匹配到的内容就是需要提取的第三个单词

如果你的场景要求单词只能用单个空格分隔,也可以用简化版本:
^[^ ]+ [^ ]+ ([^ ]+)

不同SQL环境的写法

你当前使用的是查询prod.client表的notes字段,不同数据库的正则提取函数语法略有区别,对应写法如下:

MySQL/MariaDB

SELECT REGEXP_SUBSTR(notes, '^\\S+\\s+\\S+\\s+(\\S+)', 1, 1, 'c', 1) AS third_word FROM prod.client;

最后一位参数1表示返回第一个捕获组的内容。

PostgreSQL

SELECT (regexp_match(notes, '^\S+\s+\S+\s+(\S+)'))[1] AS third_word FROM prod.client;

regexp_match返回匹配结果数组,取下标1即可得到第一个捕获组的内容。

Hive/Spark SQL

SELECT regexp_extract(notes, '^\\S+\\s+\\S+\\s+(\\S+)', 1) AS third_word FROM prod.client;

第三位参数1指定返回第一个捕获组的内容。

Oracle

SELECT REGEXP_SUBSTR(notes, '^\S+\s+\S+\s+(\S+)', 1, 1, NULL, 1) AS third_word FROM prod.client;

验证效果

你提供的所有样例数据都可以正确匹配得到预期结果:

  • 1024 xyxyxyx 138 1025 eivneini 345 4. → 返回138
  • 1028 swswsws 345 24090 bububu_ 1 2. → 返回345
  • 1028 acboru 345 1050 xwindiwf. 1 2. → 返回345
  • 1028 vnufenu 345 350 dnwufbuw 1 2. → 返回345
  • 1113 abudbu 138 1114 bububuw 12.5 1. → 返回138

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 12:45:01