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

如何从SQL Server列中提取首个括号内的数据?

在SQL Server中提取列里首个括号内的数据

需求说明

现有SQL Server列数据示例:

Pace - (SPE)-Elkart IN (OEM Sales)
Pace - (CIS) - San Francisco (CIS)
Pietila, Robert (4060)
Pace - (STP) - St Paul Manufacturing

需要提取每行中首个括号内的内容,期望结果:

SPE
CIS
4060
STP

实现方案

利用SQL Server的CHARINDEX和SUBSTRING函数组合实现,核心思路是定位首个左括号和对应的右括号位置,再截取中间内容。

基础SQL语句

SELECT 
    原列名,
    SUBSTRING(
        原列名,
        CHARINDEX('(', 原列名) + 1,
        CHARINDEX(')', 原列名, CHARINDEX('(', 原列名)) - CHARINDEX('(', 原列名) - 1
    ) AS 首个括号内容
FROM 你的表名;

函数作用解释

  • CHARINDEX('(', 原列名):定位字符串中第一个左括号(的位置
  • CHARINDEX(')', 原列名, CHARINDEX('(', 原列名)):从第一个左括号的位置开始,找到对应的右括号)的位置
  • SUBSTRING(字符串, 起始位置, 长度):从左括号后一位开始,截取到右括号前一位的内容

兼容无括号的情况

如果列中存在无括号的行,可通过CASE WHEN避免错误结果:

SELECT 
    原列名,
    CASE 
        WHEN CHARINDEX('(', 原列名) > 0 AND CHARINDEX(')', 原列名, CHARINDEX('(', 原列名)) > CHARINDEX('(', 原列名)
        THEN SUBSTRING(
            原列名,
            CHARINDEX('(', 原列名) + 1,
            CHARINDEX(')', 原列名, CHARINDEX('(', 原列名)) - CHARINDEX('(', 原列名) - 1
        )
        ELSE NULL -- 无括号时返回NULL,也可改为空字符串''
    END AS 首个括号内容
FROM 你的表名;

测试验证

用示例数据创建临时表测试:

-- 创建测试表并插入数据
DECLARE @TestTable TABLE (ColumnName VARCHAR(100))
INSERT INTO @TestTable VALUES
('Pace - (SPE)-Elkart IN (OEM Sales)'),
('Pace - (CIS) - San Francisco (CIS)'),
('Pietila, Robert (4060)'),
('Pace - (STP) - St Paul Manufacturing')

-- 提取数据
SELECT 
    ColumnName AS 原数据,
    SUBSTRING(
        ColumnName,
        CHARINDEX('(', ColumnName) + 1,
        CHARINDEX(')', ColumnName, CHARINDEX('(', ColumnName)) - CHARINDEX('(', ColumnName) - 1
    ) AS 首个括号内容
FROM @TestTable;

执行后将得到期望结果:

原数据首个括号内容
Pace - (SPE)-Elkart IN (OEM Sales)SPE
Pace - (CIS) - San Francisco (CIS)CIS
Pietila, Robert (4060)4060
Pace - (STP) - St Paul ManufacturingSTP

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 22:26:25