Перейти к содержимому
Последнее обновление

OVERLAY

Описание​

Функция OVERLAY используется для замены подстроки заданной длины в указанной позиции строки. Начиная с указанной позиции, она заменяет заданное количество символов новой строкой. Эта функция корректно работает с многобайтовыми символами.

Поведение этой функции соответствует поведению функции INSERT в MySQL.

Псевдоним​

  • INSERT

Синтаксис​

OVERLAY(<str>, <pos>, <len>, <newstr>)

Параметры​

ПараметрОписание
<str>Исходная строка, которую нужно изменить. Тип: VARCHAR
<pos>Начальная позиция замены (нумерация с 1). Тип: INT
<len>Количество символов для замены. Тип: INT
<newstr>Новая строка для замены. Тип: VARCHAR

Возвращаемое значение​

Возвращает новую строку типа VARCHAR после замены.

Особые случаи:

  • Если любой из параметров равен NULL, возвращает NULL
  • Если <pos> меньше 1 или превышает длину строки, замена не выполняется и возвращается исходная строка
  • Если <len> меньше 0 или превышает оставшуюся длину, замена выполняется от <pos> до конца строки

Примеры​

  1. Базовое использование: замена средней части строки
SELECT overlay('Quadratic', 3, 4, 'What');
+------------------------------------+
| overlay('Quadratic', 3, 4, 'What') |
+------------------------------------+
| QuWhattic |
+------------------------------------+
  1. Отрицательная длина: замена до конца строки
SELECT overlay('Quadratic', 2, -1, 'Hi');
+-----------------------------------+
| overlay('Quadratic', 2, -1, 'Hi') |
+-----------------------------------+
| QHi |
+-----------------------------------+
  1. Позиция за пределами строки: замена не выполняется
SELECT overlay('Hello', 10, 2, 'X');
+-------------------------------+
| overlay('Hello', 10, 2, 'X') |
+-------------------------------+
| Hello |
+-------------------------------+
  1. Обработка значения NULL
SELECT overlay('Hello', NULL, 2, 'X');
+--------------------------------+
| overlay('Hello', NULL, 2, 'X') |
+--------------------------------+
| NULL |
+--------------------------------+
SELECT INSERT('🎉🎊🎈', 2, 1, '🎁');
+--------------------------------------+
| INSERT('🎉🎊🎈', 2, 1, '🎁') |
+--------------------------------------+
| 🎉🎁🎈 |
+--------------------------------------+