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

如何从SQL列中提取方括号内两值并拆分至不同列?

拆分NAME列的实现方案

针对将包含[数字 文本]格式的NAME列拆分为三列的需求,可通过字符串处理函数实现,以下是主流数据库的具体写法:

核心逻辑

  • 提取方括号前的纯名称:截取字符串到[的位置
  • 提取方括号内的数字部分:匹配方括号内空格前的数值(支持小数)
  • 提取方括号内的文本部分:匹配方括号内空格后的文本(支持带点号的格式)

MySQL/MariaDB

使用SUBSTRING_INDEX和REGEXP_SUBSTR函数:

SELECT
  TRIM(SUBSTRING_INDEX(NAME, '[', 1)) AS `NAME`,
  TRIM(REGEXP_SUBSTR(NAME, '[0-9.]+', 1, 1)) AS `NAME 1`,
  TRIM(REGEXP_SUBSTR(NAME, '[a-zA-Z.]+', 1, 2)) AS `NAME 2`
FROM your_table;

说明:SUBSTRING_INDEX截取[前的内容,REGEXP_SUBSTR分别匹配第一个数值(含小数点)和第二个字母/点号组成的文本,TRIM去除多余空格。

SQL Server

使用CHARINDEX、SUBSTRING和PATINDEX:

SELECT
  TRIM(SUBSTRING(NAME, 1, CHARINDEX('[', NAME) - 1)) AS [NAME],
  TRIM(SUBSTRING(NAME, CHARINDEX('[', NAME) + 1, PATINDEX('% [^0-9.]%', NAME) - CHARINDEX('[', NAME) - 1)) AS [NAME 1],
  TRIM(SUBSTRING(NAME, PATINDEX('% [^0-9.]%', NAME) + 1, CHARINDEX(']', NAME) - PATINDEX('% [^0-9.]%', NAME) - 1)) AS [NAME 2]
FROM your_table;

说明:通过CHARINDEX定位[和]的位置,PATINDEX找到数字与文本之间的空格位置,再用SUBSTRING截取对应片段。

PostgreSQL

使用SPLIT_PART和REGEXP_MATCH:

SELECT
  TRIM(SPLIT_PART(NAME, '[', 1)) AS "NAME",
  TRIM((REGEXP_MATCH(NAME, '\[(\d+\.*\d*) ')::TEXT[])[1]) AS "NAME 1",
  TRIM((REGEXP_MATCH(NAME, ' (\w+\.*\w*)\]')::TEXT[])[1]) AS "NAME 2"
FROM your_table;

说明:SPLIT_PART拆分出方括号前的名称,REGEXP_MATCH通过正则捕获组提取方括号内的数字和文本,再取出对应组的内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 02:25:19