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

PostgreSQL 13.2:如何截取至首个大写单词前的子串(含首词)

实现方案

可以通过PostgreSQL的正则表达式匹配来实现这个需求,以下是具体的函数实现和说明:

函数定义

CREATE OR REPLACE FUNCTION substringtiluppercase(input_str text)
RETURNS text
LANGUAGE sql
IMMUTABLE
AS $$
SELECT substring(input_str from '^(\S+(?:\s+\S+)*?)(?=\s+[A-ZÕÄÖÜŠŽ]\S+|$)');
$$;

正则逻辑说明

  • ^:匹配字符串的起始位置
  • (\S+(?:\s+\S+)*?):捕获目标子串的核心部分
    • \S+:匹配第一个单词(确保首词必包含在结果中)
    • (?:\s+\S+)*?:非贪婪匹配后续的“空格+单词”组合,避免过度匹配
  • (?=\s+[A-ZÕÄÖÜŠŽ]\S+|$):正向预查终止条件,当遇到以下两种情况时停止匹配:
    1. \s+[A-ZÕÄÖÜŠŽ]\S+:空格后紧跟以指定大写字母(A-Z及Õ、Ä、Ö、Ü、Š、Ž)开头的单词
    2. $:字符串结束位置(处理没有大写开头单词的场景)

测试验证

执行示例查询:

select substringtiluppercase('Aaa b cC Dfff dfgdf');

返回结果:

Aaa b cC

其他边界场景测试:

  • 仅含首词:select substringtiluppercase('Hello') → 返回 Hello
  • 首词大写,第二个词即大写:select substringtiluppercase('Hello World test') → 返回 Hello
  • 无大写开头单词:select substringtiluppercase('aaa bbb ccc') → 返回 aaa bbb ccc
  • 含特殊大写字母:select substringtiluppercase('Õabc def Äghi') → 返回 Õabc def

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 17:45:33