仅替换字符串的第 3 到第 6 个位置

Replacing only 3rd to 6th position of a String

我是 SQL 的新手。我只想用“1219”替换下面字符串的第 3 到第 6(仅第 1 个 1234)位置,但它替换了整个新字符串:

SELECT REPLACE('DD123412341234',SUBSTR('DD123412341234',3,4),'1219' ) FROM DUAL;

Kindle 也有同样的建议。

你可以用函数 regexp_replace 来完成。

select regexp_replace('DD123412341234','....','1219',3,1) as RESULT from DUAL

如文档中所述,第二个函数参数是要搜索的正则表达式,在本例中是任意四个字符。第三个参数是替换字符串。第四个 [optional] 参数表示从第三个字符开始搜索,最后一个 [also optional] 参数表示只搜索第一次出现并将第一次出现的替换为 1219.

以上查询结果为DD121912341234

正则表达式往往相对较慢。由于您知道替换替代项的具体位置,因此可以使用串联运算符将要保留和重建的部分分拆。以下可能速度更快,但确实涉及更多操作。

with test(t) as 
     (select 'DD123412341234' from dual) 
select substr(t,1,2) || '1219' || substr(t,7) 
   from test;