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

SQL中如何提取特定字符后的子串替换原有字段值?

不同数据库下的实现方案

核心逻辑是先定位/符号在字符串中的位置,再截取该位置之后的所有内容即可。如果存在部分值没有/的场景,可以额外加判断逻辑保留原值,避免执行出错。


各数据库具体实现

MySQL

  • 仅查询不修改原有数据:
SELECT SUBSTRING_INDEX(字段名, '/', -1) AS 处理后字段 FROM 表名;
  • 直接修改表中原有值(执行前建议先备份数据):
UPDATE 表名 SET 字段名 = SUBSTRING_INDEX(字段名, '/', -1);

注:SUBSTRING_INDEX的第三个参数为-1表示取最后一个分隔符之后的内容,就算值里有多个/也能取到最后一段。

PostgreSQL

  • 查询:
SELECT SPLIT_PART(字段名, '/', -1) AS 处理后字段 FROM 表名;
  • 更新:
UPDATE 表名 SET 字段名 = SPLIT_PART(字段名, '/', -1);

SQL Server

  • 查询:
SELECT RIGHT(字段名, LEN(字段名) - CHARINDEX('/', 字段名)) AS 处理后字段 FROM 表名;
  • 更新:
UPDATE 表名 SET 字段名 = RIGHT(字段名, LEN(字段名) - CHARINDEX('/', 字段名)) WHERE CHARINDEX('/', 字段名) > 0;

注:加WHERE条件是为了跳过没有/的行,避免修改出错。

Oracle

  • 查询:
SELECT SUBSTR(字段名, INSTR(字段名, '/') + 1) AS 处理后字段 FROM 表名;
  • 更新:
UPDATE 表名 SET 字段名 = SUBSTR(字段名, INSTR(字段名, '/') + 1) WHERE INSTR(字段名, '/') > 0;

特殊场景处理

如果字段值可能不存在/,需要保留原值的话,可以加判断函数,比如MySQL里用IF实现:

SELECT IF(LOCATE('/', 字段名) > 0, SUBSTRING_INDEX(字段名, '/', -1), 字段名) AS 处理后字段 FROM 表名;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 01:39:04