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

如何通过SQL查询提取字符串中括号内的内容

SQL提取括号内部内容的实现方案

核心逻辑为定位左括号(和右括号)的位置,截取两个位置中间的字符串即可,以下为不同数据库的具体实现:

1. MySQL 实现

使用SUBSTRING+LOCATE函数实现:

-- 示例测试
SELECT SUBSTRING(
    'Kingdom of Saudi Arabia (KSA)',
    LOCATE('(', 'Kingdom of Saudi Arabia (KSA)') + 1,
    LOCATE(')', 'Kingdom of Saudi Arabia (KSA)') - LOCATE('(', 'Kingdom of Saudi Arabia (KSA)') - 1
) AS extracted_content;

-- 表查询写法
SELECT SUBSTRING(
    your_column,
    LOCATE('(', your_column) + 1,
    LOCATE(')', your_column) - LOCATE('(', your_column) - 1
) AS extracted_content
FROM your_table;

运行示例测试代码可直接得到输出结果KSA。

2. PostgreSQL 实现

直接用正则匹配写法更简洁:

-- 示例测试
SELECT SUBSTRING('Kingdom of Saudi Arabia (KSA)' FROM '\((.*?)\)') AS extracted_content;

-- 表查询写法
SELECT SUBSTRING(your_column FROM '\((.*?)\)') AS extracted_content
FROM your_table;

3. SQL Server 实现

使用SUBSTRING+CHARINDEX函数实现:

SELECT SUBSTRING(
    your_column,
    CHARINDEX('(', your_column) + 1,
    CHARINDEX(')', your_column) - CHARINDEX('(', your_column) - 1
) AS extracted_content
FROM your_table;

4. Oracle 实现

使用REGEXP_SUBSTR正则匹配实现:

SELECT REGEXP_SUBSTR(your_column, '\((.*?)\)', 1, 1, NULL, 1) AS extracted_content
FROM your_table;

注意事项

  • 以上默认提取第一对括号内的内容,如果需要提取多对括号内容可调整正则匹配参数
  • 如果数据存在无括号的行,建议加判断逻辑避免报错,示例如下:
SELECT 
  CASE WHEN your_column LIKE '%(%)%' 
    THEN SUBSTRING(your_column, LOCATE('(', your_column) + 1, LOCATE(')', your_column) - LOCATE('(', your_column) - 1)
    ELSE NULL 
  END AS extracted_content
FROM your_table;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 16:24:04