Oracle还是SQL中字符函数中有没有替换功能

有这个函数吗?我打入stuff 又没有这样的函数。实现功能就是如字符串‘agcdff✀,我想把c换成d,就是 换指定位置否的字符,我用了最差尽的方法,就是用substr(‘agcdff✀,0,2)||✀d✀||substr(‘agcdff✀,4,3).有什么好办法吗?这个应该很简单的。
2026年09月22日 06:11
有4个网友回答
网友(1):

stuff  是 SQL Server 的函数, 功能是:

删除指定长度的字符并在指定的起始点插入另一组字符


例如:



1> SELECT
2>   STUFF(',1,2,3', 1, 1, '') A,
3>   STUFF(';A;B;C', 1, 3, 'Z;') B,
4>   STUFF('X;Y;Z', 3, 1, 'C') C
5> go
A      B     C
------ ----- ------
1,2,3  Z;B;C X;C;Z

(1 行受影响)



Oracle  没有这个函数, 但是可以使用 SUBSTR  来实现相同的功能

CREATE OR REPLACE FUNCTION STUFF(
  v_BaseStr VARCHAR2,
  v_StartIndex INT,
  v_Length INT,
  v_ReplaceStr VARCHAR2
)RETURN VARCHAR2 IS
BEGIN
  RETURN 
    SUBSTR(v_BaseStr, 1, v_StartIndex - 1) ||
    v_ReplaceStr ||
    SUBSTR(v_BaseStr, v_StartIndex + v_Length);
END;
/

函数已创建。

SQL> SELECT
  2    STUFF (',1,2,3', 1, 1, '') A,
  3    STUFF(';A;B;C', 1, 3, 'Z;') B,
  4    STUFF('X;Y;Z', 3, 1, 'C') C
  5  FROM
  6    dual;

A
-----------------------------------------------------
B
-----------------------------------------------------
C
-----------------------------------------------------
1,2,3
Z;B;C
X;C;Z

网友(2):

换指定字符串用replace

换指定位置,就是你的写法,用substr

网友(3):

select REPLACE( '00000921000001 ', '921',
'924') from dual;
select translate(
'00000921000001 ', '921', '924') from dual;

网友(4):

select replace('agcdff','c','d') from dual;