OVERLAY

将一个字符串的一部分替换为另一个字符串,并将新的字符串值以 VARCHAR 形式返回。

行为类型

如果使用 OCTETS,则为 不可变,否则为 稳定

语法

OVERLAY ( input‑string PLACING replace‑string FROM position [ FOR extent ] [ USING { CHARACTERS | OCTETS } ] )

参数

input‑string
要处理的字符串,类型为 CHAR 或 VARCHAR。
replace‑string
用于替换 input-string 的指定子字符串的字符串,类型为 CHAR 或 VARCHAR。
position
整数 ≥1,指定 input‑string 的第一个字符或八位字节覆盖 replace‑string
extent
整数,指定要使用 replace‑string 覆盖的 input‑string 字符或八位字节的数量。如果省略,则 OVERLAY 使用 replace‑string 的长度。

例如,比较以下 OVERLAY 调用:

  • OVERLAY 省略 FOR 子句。输入字符串中替换的字符数等于替换字符串 ABC 中的字符数:

    
    dbadmin=> SELECT OVERLAY ('123456789' PLACING 'ABC' FROM 5);
      overlay
    -----------
     1234ABC89
    (1 row)
    
  • OVERLAY 包括 FOR 子句,指定使用替换字符串替换输入字符串中的 4 个字符。替换字符串的长度为三个字符,因此 OVERLAY 返回的字符串比输入字符串少 1 个字符:

    => SELECT OVERLAY ('123456789' PLACING 'ABC' FROM 5 FOR 4);
     overlay
    ----------
     1234ABC9
    (1 row)
    
  • OVERLAY 包括 FOR 子句,指定使用替换字符串替换输入字符串中的 -2 个字符。函数返回的字符串比输入字符串多 2 个字符:

    => SELECT OVERLAY ('123456789' PLACING 'ABC' FROM 5 FOR -2);
        overlay
    ----------------
     1234ABC3456789
    (1 row)
    
USING CHARACTERS | OCTETS
指定 OVERLAY 使用字符(默认)还是八位字节。

示例

=> SELECT OVERLAY('123456789' PLACING 'xxx' FROM 2);
  overlay
-----------
 1xxx56789
(1 row)

=> SELECT OVERLAY('123456789' PLACING 'XXX' FROM 2 USING OCTETS);
 overlayb
-----------
 1XXX56789
(1 row)

=> SELECT OVERLAY('123456789' PLACING 'xxx' FROM 2 FOR 4);
 overlay
----------
 1xxx6789
(1 row)

=> SELECT OVERLAY('123456789' PLACING 'xxx' FROM 2 FOR 5);
 overlay
---------
 1xxx789
(1 row)

=> SELECT OVERLAY('123456789' PLACING 'xxx' FROM 2 FOR 6);
 overlay
---------
 1xxx89
(1 row)