类别:

字符串和二进制函数 (通用)

INSERT

用新的字符串或二进制值从指定位置开始替换指定长度的子字符串。

请勿将此函数与 INSERT DML 命令混淆。

语法

INSERT( <base_expr>, <pos>, <len>, <insert_expr> )
Copy

实参

base_expr

要插入/替换字符的字符串或 BINARY 表达式。

pos

开始插入字符的偏移位置。此位置从 1 而不是 0 开始。换句话说,字符串中的第一个字符被认为位于位置 1,而不是位置 0。例如,要在字符串的开头插入,请将 pos 设置为 1。

有效值介于 1 和字符串长度加 1 之间(包括两者)。

pos 设置为字符串长度加 1 会使操作等效于追加。(这还需要将 len 参数设置为 0,因为不应尝试删除最后一个字符之后的任何字符。)

len

要替换的字符数(从 pos 开始)。有效值的范围是从 0 到 pos 与字符串结尾之间的字符数。如果该值为 0,则表示添加新字符而不删除任何现有字符。

insert_expr

要插入 base_expr 中的字符串。如果此字符串为空,并且如果 len 大于零,那么实际上操作变成了删除(删除一些字符,不添加任何字符)。

使用说明

  • base_exprinsert_expr 应该是相同的数据类型;两者都应该是字符串(例如 VARCHAR)或都应该是二进制。

  • 如果任何实参为 NULL,则返回值为 NULL。

返回

返回一个字符串或 BINARY,这等效于复制 base_expr,删除从 pos 开始的 len 个字符,然后在 pos 处插入 insert_expr

请注意,原始输入 base_expr 未被更改;此函数返回一个(修改后)的单独副本。

示例

这是一个简单的示例:

SELECT INSERT('abc', 1, 2, 'Z') as STR;
+-----+
| STR |
|-----|
| Zc  |
+-----+
Copy

此示例说明替换字符串的长度可以与被替换的子字符串的长度不同:

SELECT INSERT('abcdef', 3, 2, 'zzz') as STR;
+---------+
| STR     |
|---------|
| abzzzef |
+---------+
Copy

此示例说明当替换字符串为空时会发生什么(此函数从开始位置开始删除指定数量的字符,并且不添加任何字符):

SELECT INSERT('abc', 2, 1, '') as STR;
+-----+
| STR |
|-----|
| ac  |
+-----+
Copy

此示例通过在紧接原始字符串的最后一个字符之后的位置添加字符,将 INSERT 用作追加操作:

SELECT INSERT('abc', 4, 0, 'Z') as STR;
+------+
| STR  |
|------|
| abcZ |
+------+
Copy

以下示例全都返回 NULL,因为至少有一个实参为 NULL:

SELECT INSERT(NULL, 1, 2, 'Z') as STR;
+------+
| STR  |
|------|
| NULL |
+------+
Copy
SELECT INSERT('abc', NULL, 2, 'Z') as STR;
+------+
| STR  |
|------|
| NULL |
+------+
Copy
SELECT INSERT('abc', 1, NULL, 'Z') as STR;
+------+
| STR  |
|------|
| NULL |
+------+
Copy
SELECT INSERT('abc', 1, 2, NULL) as STR;
+------+
| STR  |
|------|
| NULL |
+------+
Copy
语言: 中文