OVERLAY
将一个字符串的一部分替换为另一个字符串,并将新的字符串值以 VARCHAR 形式返回。
行为类型
语法
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)