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

如何用T-SQL移除表中字段末尾的(###)格式内容?

需求:移除字段末尾的(数字)格式内容

我的表中存在如下格式的字段值:

Name
______
Name(122)
anotherName(12312)
Another2Name(12321) 
Name(2)Name(123213)

希望将其转换为如下格式:

Name
______
Name
anotherName
Another2Name 
Name(2)Name

此前尝试过移除括号后的所有内容,但部分字段值本身包含括号;也尝试过移除所有数字,但会误删字段内的合法数字(如Another2Name中的2),请问如何编写查询语句或更新表来实现需求?


解决方案

MySQL/MariaDB

利用正则表达式替换函数REGEXP_REPLACE,精准匹配字符串末尾的(一串数字)格式内容并替换为空:

查询验证语句:

SELECT 
  original_column,
  REGEXP_REPLACE(original_column, '\\([0-9]+\\)$', '') AS processed_column
FROM your_table;

更新表语句:

UPDATE your_table
SET original_column = REGEXP_REPLACE(original_column, '\\([0-9]+\\)$', '');

SQL Server

SQL Server 2017及以上版本支持REGEXP_REPLACE,写法如下:

查询验证语句:

SELECT 
  original_column,
  REGEXP_REPLACE(original_column, '\([0-9]+\)$', '') AS processed_column
FROM your_table;

更新表语句:

UPDATE your_table
SET original_column = REGEXP_REPLACE(original_column, '\([0-9]+\)$', '');

如果是不支持正则的旧版本SQL Server,可通过字符串函数组合实现:

SELECT 
  original_column,
  CASE 
    WHEN RIGHT(original_column, 1) = ')' 
         AND CHARINDEX('(', REVERSE(original_column)) > 0
         THEN LEFT(original_column, LEN(original_column) - CHARINDEX('(', REVERSE(original_column)))
    ELSE original_column
  END AS processed_column
FROM your_table;

PostgreSQL

使用REGEXP_REPLACE实现需求:

查询验证语句:

SELECT 
  original_column,
  REGEXP_REPLACE(original_column, '\([0-9]+\)$', '') AS processed_column
FROM your_table;

更新表语句:

UPDATE your_table
SET original_column = REGEXP_REPLACE(original_column, '\([0-9]+\)$', '');

正则规则说明

正则表达式\([0-9]+\)$的作用:

  • \(:转义匹配左括号(括号在正则中是特殊字符,需转义)
  • [0-9]+:匹配1个或多个连续数字
  • \):转义匹配右括号
  • $:限定匹配位置为字符串末尾,确保只移除最后一段的(数字)内容,不会影响字段中间的合法括号(比如Name(2)Name里的(2)会被保留)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 20:19:58