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

如何在SQL中仅替换字符串第3到第6位字符,不替换其余匹配内容

问题原因

你原来的写法调用REPLACE时,会匹配原字符串里所有和第二个参数(也就是你截取的3-6位1234)完全一致的子串做全局替换,所以后面出现的两次1234也会被同步替换,不符合只改固定位置的需求。

通用解决方案(适配所有支持SUBSTR的数据库,包括Oracle、MySQL、PostgreSQL等)

直接拆分字符串做拼接,只修改指定位置的内容:

SELECT CONCAT(
  SUBSTR('DD123412341234', 1, 2),
  '1219',
  SUBSTR('DD123412341234', 7)
) FROM DUAL;

逻辑说明:

  • 取原字符串前2位DD
  • 拼接你要替换的内容1219
  • 拼接原字符串从第7位开始的剩余所有内容

数据库专属简化方案

MySQL

可以直接调用内置的INSERT函数完成指定位置替换:

SELECT INSERT('DD123412341234', 3, 4, '1219');

参数说明:INSERT(原字符串, 替换起始位置, 替换长度, 新内容)

支持正则的数据库(Oracle、MySQL 8.0+、PostgreSQL等)

如果需求是替换第一次出现的1234而非固定位置,可以用REGEXP_REPLACE限制替换次数:

SELECT REGEXP_REPLACE('DD123412341234', '1234', '1219', 1, 1) FROM DUAL;

最后两个参数分别表示:从第1位开始搜索、只替换第1次匹配到的结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 23:36:03