如何通过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
相关产品推荐
相关产品推荐

