- 类别:
字符串和二进制函数 (通用)
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 | +------+