跳到主要内容

SUB_REPLACE

描述

SUB_REPLACE 函数用于替换字符串中指定位置和长度的子字符串。从 start 位置开始,用 new_str 替换长度为 len 的字符。

语法

SUB_REPLACE(<str>, <new_str>, <start>[, <len>])

参数

参数说明
<str>要进行替换操作的目标字符串。类型:VARCHAR
<new_str>用于替换的字符串。类型:VARCHAR
<start>替换开始的位置(从0开始)。类型:INT
<len>要替换的字符长度(可选,默认为 new_str 的长度)。类型:INT

返回值

返回 VARCHAR 类型,为替换后的新字符串。

特殊情况:

  • 如果任意参数为 NULL,返回 NULL
  • 如果 <start><len> 为负数,返回 NULL
  • 如果 <start> 超出字符串长度,返回 NULL
  • 如果 <len> 超出剩余字符串长度,替换到字符串末尾

示例

  1. 基本用法:指定位置和长度替换
SELECT sub_replace('doris', '***', 1, 2);
+-----------------------------------+
| sub_replace('doris', '***', 1, 2) |
+-----------------------------------+
| d***is |
+-----------------------------------+
  1. 使用默认长度替换
SELECT sub_replace('hello', 'Hi', 0);
+--------------------------------+
| sub_replace('hello', 'Hi', 0) |
+--------------------------------+
| Hillo |
+--------------------------------+
  1. 负数参数返回 NULL
SELECT sub_replace('hello', 'Hi', -1, 2);
+------------------------------------+
| sub_replace('hello', 'Hi', -1, 2) |
+------------------------------------+
| NULL |
+------------------------------------+
  1. NULL 值处理
SELECT sub_replace(NULL, 'new', 0, 3);
+-------------------------------------+
| sub_replace(NULL, 'new', 0, 3) |
+-------------------------------------+
| NULL |
+-------------------------------------+
  1. utf-8 字符串
SELECT sub_replace('doris', 'ṛìḍḍ', 1, 2);
+-------------------------------------------+
| sub_replace('doris', 'ṛìḍḍ', 1, 2) |
+-------------------------------------------+
| dṛìḍḍis |
+-------------------------------------------+
  1. 起始位置大于字符串长度
 SELECT sub_replace('hello', 'Hi', 9, 2);
+----------------------------------+
| sub_replace('hello', 'Hi', 9, 2) |
+----------------------------------+
| NULL |
+----------------------------------+
  1. 指定替换长度大于剩余字符串长度
SELECT sub_replace('hello', 'Hi', 1, 9);
+----------------------------------+
| sub_replace('hello', 'Hi', 1, 9) |
+----------------------------------+
| hHi |
+----------------------------------+