- 类别:
字符串和二进制函数 (通用)
INSERT¶
用新的字符串或二进制值从指定位置开始替换指定长度的子字符串。
请勿将此函数与 INSERT DML 命令混淆。
语法¶
INSERT( <base_expr>, <pos>, <len>, <insert_expr> )
实参¶
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_expr
和insert_expr
应该是相同的数据类型;两者都应该是字符串(例如 VARCHAR)或都应该是二进制。如果任何实参为 NULL,则返回值为 NULL。
返回¶
返回一个字符串或 BINARY,这等效于复制 base_expr
,删除从 pos
开始的 len
个字符,然后在 pos
处插入 insert_expr
。
请注意,原始输入 base_expr
未被更改;此函数返回一个(修改后)的单独副本。
示例¶
这是一个简单的示例:
SELECT INSERT('abc', 1, 2, 'Z') as STR; +-----+ | STR | |-----| | Zc | +-----+
此示例说明替换字符串的长度可以与被替换的子字符串的长度不同:
SELECT INSERT('abcdef', 3, 2, 'zzz') as STR; +---------+ | STR | |---------| | abzzzef | +---------+
此示例说明当替换字符串为空时会发生什么(此函数从开始位置开始删除指定数量的字符,并且不添加任何字符):
SELECT INSERT('abc', 2, 1, '') as STR; +-----+ | STR | |-----| | ac | +-----+
此示例通过在紧接原始字符串的最后一个字符之后的位置添加字符,将 INSERT
用作追加操作:
SELECT INSERT('abc', 4, 0, 'Z') as STR; +------+ | STR | |------| | abcZ | +------+
以下示例全都返回 NULL,因为至少有一个实参为 NULL:
SELECT INSERT(NULL, 1, 2, 'Z') as STR; +------+ | STR | |------| | NULL | +------+SELECT INSERT('abc', NULL, 2, 'Z') as STR; +------+ | STR | |------| | NULL | +------+SELECT INSERT('abc', 1, NULL, 'Z') as STR; +------+ | STR | |------| | NULL | +------+SELECT INSERT('abc', 1, 2, NULL) as STR; +------+ | STR | |------| | NULL | +------+