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

如何在SQL中提取第二个大写字母之前的字符串内容?

按第二个大写字母拆分字符串并提取前缀:SQL与Python实现方案

这个需求既可以用SQL实现,也可以用Python处理,以下是具体的实现方法:

SQL实现(分数据库示例)

不同SQL数据库的字符串处理函数略有差异,以下是主流数据库的实现方式:

MySQL/MariaDB

利用正则定位函数找到第二个大写字母的位置,再截取前缀:

SELECT 
    SUBSTRING(your_column, 1, 
        LOCATE(
            SUBSTRING(your_column, REGEXP_INSTR(your_column, '[A-Z]') + 1, 1),
            your_column
        )
    ) AS extracted_prefix
FROM your_table;

逻辑:先用REGEXP_INSTR定位第一个大写字母的位置,偏移1位后取第二个大写字母,再用LOCATE找到该字母在原字符串中的位置,最后截取到该位置的内容。

PostgreSQL

通过正则表达式直接匹配包含前两个大写字母的前缀:

SELECT 
    substring(your_column from '^[^A-Z]*[A-Z][^A-Z]*[A-Z]') AS extracted_prefix
FROM your_table;

或者使用regexp_match提取匹配组:

SELECT 
    (regexp_match(your_column, '^(.*?[A-Z].*?[A-Z])'))[1] AS extracted_prefix
FROM your_table;

SQL Server

结合PATINDEX和STUFF定位第二个大写字母:

SELECT 
    SUBSTRING(your_column, 1, 
        PATINDEX('%[A-Z]%', STUFF(your_column, 1, PATINDEX('%[A-Z]%', your_column), '')) 
        + PATINDEX('%[A-Z]%', your_column)
    ) AS extracted_prefix
FROM your_table;

逻辑:先用PATINDEX找到第一个大写字母的位置,用STUFF移除该位置之前的内容,再在剩余字符串中找到第二个大写字母的位置,两者相加得到总截取长度。

Python实现

用正则表达式匹配前两个大写字母及之前的内容,代码简洁高效:

import re

# 示例字符串列表
input_strings = ["nycTrSeven", "nycPkExt", "nycAbEchTrn"]
# 正则模式:匹配开头到第二个大写字母的所有内容
pattern = r'^[^A-Z]*[A-Z][^A-Z]*[A-Z]'

extracted_results = [re.search(pattern, s).group() for s in input_strings]
print(extracted_results)
# 输出:['nycTr', 'nycPk', 'nycAb']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 11:11:04