INSERT(s1, x, len, s2) 函数用来替换字符串,返回被替换后的新字符串。
该函数将在 s1 字符串的 x 位置开始的 len 个字符使用 s2 字符串进行替换。例如:
INSERT('0123456789', 1, 4, 'HELLO');
上面示例,将 0123 字符串替换成 “HELLO” 字符串,替换后的字符串为 “HELLO456789”。
s1:目标字符串。如果 s1 = NULL,则函数直接返回 NULL。
x:替换的开始位置,从 1 开始。如果 x <= 0,则直接返回 s1 原始字符串。
len:待替换字符的个数。如果 len = 0,则将 s2 字符串插入到 x 位置,没有任何替换操作。如果 len < 0,则直接使用 s2 字符串整体替换 s1 字符串。
s2:要替换的字符串。
(1)将字符串“0123456789”的前五个字符使用“hello”字符串进行替换,如下:
mysql> select INSERT('0123456789', 1, 5, 'hello'); +-------------------------------------+ | INSERT('0123456789', 1, 5, 'hello') | +-------------------------------------+ | hello56789 | +-------------------------------------+ 1 row in set (0.02 sec)
由运行结果可知,x 参数是从1开始计算的。
(2)将字符串“0123456789”的前三个字符使用“hello”字符串进行替换,如下:
mysql> select INSERT('0123456789', 1, 3, 'hello'); +-------------------------------------+ | INSERT('0123456789', 1, 3, 'hello') | +-------------------------------------+ | hello3456789 | +-------------------------------------+ 1 row in set (0.03 sec)
(3)如果 x 参数超过字符串长度,或者 x 参数小于等于0,则返回值为原始字符串。如下:
mysql> select INSERT('0123456789', 20, 5, 'hello'); +--------------------------------------+ | INSERT('0123456789', 20, 5, 'hello') | +--------------------------------------+ | 0123456789 | +--------------------------------------+ 1 row in set (0.02 sec) mysql> select INSERT('0123456789', -1, 5, 'hello'); +--------------------------------------+ | INSERT('0123456789', -1, 5, 'hello') | +--------------------------------------+ | 0123456789 | +--------------------------------------+ 1 row in set (0.02 sec) mysql> select INSERT('0123456789', 0, 5, 'hello'); +-------------------------------------+ | INSERT('0123456789', 0, 5, 'hello') | +-------------------------------------+ | 0123456789 | +-------------------------------------+ 1 row in set (0.02 sec)
(4)如果 len 的长度大于 s1 字符串从 x 开始到结尾字符串的个数,则直接从位置 x 开始替换。如下:
mysql> select INSERT('0123456789', 5, 10, 'hello'); +--------------------------------------+ | INSERT('0123456789', 5, 10, 'hello') | +--------------------------------------+ | 0123hello | +--------------------------------------+ 1 row in set (0.02 sec)
由运行结果可知,“0123456789” 字符串从 5 开始到结尾只有 6 个字符,而设置的 len=10。INSERT 函数将从 5 开始替换,将 “456789” 字符串替换成 “hello” 字符串。
(5)如果 INSERT 函数的任何一个参数为 NULL,则返回值为 NULL。如下:
mysql> select INSERT(NULL, 1, 5, 'hello'); +-----------------------------+ | INSERT(NULL, 1, 5, 'hello') | +-----------------------------+ | NULL | +-----------------------------+ 1 row in set (0.02 sec) mysql> select INSERT('0123456789', NULL, 5, 'hello'); +----------------------------------------+ | INSERT('0123456789', NULL, 5, 'hello') | +----------------------------------------+ | NULL | +----------------------------------------+ 1 row in set (0.03 sec) mysql> select INSERT('0123456789', 1, NULL, 'hello'); +----------------------------------------+ | INSERT('0123456789', 1, NULL, 'hello') | +----------------------------------------+ | NULL | +----------------------------------------+ 1 row in set (0.03 sec) mysql> select INSERT('0123456789', 1, 5, NULL); +----------------------------------+ | INSERT('0123456789', 1, 5, NULL) | +----------------------------------+ | NULL | +----------------------------------+ 1 row in set (0.03 sec)