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

如何在SQL Server中提取字符串内的大写字母及间隔下划线

SQL Server 字符串提取实现方案

核心逻辑:先定位字符串中第一个小写英文字母的起始位置,再截取从字符串开头到该位置前1位的内容即可,完全匹配你要求的提取规则。

用到的核心函数

  • PATINDEX('%[a-z]%', 目标字符串):匹配第一个小写英文字母的索引位置(SQL Server字符串索引默认从1开始)
  • LEFT(目标字符串, 截取长度):从字符串左侧截取指定长度的内容

通用查询代码

SELECT 
    LEFT(
        你的字段名, 
        PATINDEX('%[a-z]%', 你的字段名 + 'a') - 1
    ) AS 提取结果
FROM 你的表名

代码中给目标字符串末尾拼接'a'是为了兼容目标字符串完全没有小写字母的场景,避免PATINDEX返回0导致截取长度为负报错。

排序规则兼容处理

如果你的数据库使用大小写不敏感的排序规则,需要强制指定大小写敏感的排序规则保证小写字母匹配正确,修改写法如下:

SELECT 
    LEFT(
        你的字段名, 
        PATINDEX('%[a-z]%', 你的字段名 COLLATE SQL_Latin1_General_CP1_CS_AS + 'a') - 1
    ) AS 提取结果
FROM 你的表名

效果验证

示例1:输入字符串ABC_DEF_ghi
PATINDEX匹配到第一个小写字母g的位置是8,截取前7位,结果为ABC_DEF,符合预期
示例2:输入字符串ABC_DEF_GHI_jkl
PATINDEX匹配到第一个小写字母j的位置是12,截取前11位,结果为ABC_DEF_GHI,符合预期

自定义函数复用方案

如果需要频繁调用该提取逻辑,可以封装为自定义标量函数:

CREATE FUNCTION dbo.ExtractUpperUnderscoreSegment (@inputStr NVARCHAR(MAX))
RETURNS NVARCHAR(MAX)
AS
BEGIN
    RETURN LEFT(
        @inputStr, 
        PATINDEX('%[a-z]%', @inputStr COLLATE SQL_Latin1_General_CP1_CS_AS + 'a') - 1
    )
END

调用方式:

SELECT dbo.ExtractUpperUnderscoreSegment(你的字段名) AS 提取结果 FROM 你的表名

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 16:36:04