Categorias:

Funções de cadeia de caracteres e binários (General)

INSERT

Substitui uma subcadeia de caracteres de comprimento especificado, começando na posição determinada, por uma nova cadeia de caracteres ou valor binário.

Esta função não deve ser confundida com o comando INSERT DML.

Sintaxe

INSERT( <base_expr>, <pos>, <len>, <insert_expr> )
Copy

Argumentos

base_expr

A cadeia de caracteres ou expressão BINARY para a qual você deseja inserir/substituir caracteres.

pos

O offset no qual se começa a inserir caracteres. Isso é baseado em 1, não em 0. Em outras palavras, o primeiro caractere da cadeia de caracteres é considerado como estando na posição 1, não na posição 0. Por exemplo, para inserir no início da cadeia de caracteres, defina pos como 1.

Os valores válidos estão entre 1 e um a mais do que o comprimento da cadeia de caracteres (inclusive).

A configuração pos para obter mais de um comprimento da cadeia de caracteres torna a operação equivalente a um apêndice. (Isto também requer que o parâmetro len seja 0 porque você não deve tentar apagar nenhum caractere além do último caractere).

len

O número de caracteres (começando em pos) que você deseja substituir. Os valores válidos variam de 0 até o número de caracteres entre pos e o fim da cadeia de caracteres. Se isto for 0, significa adicionar os novos caracteres sem excluir os caracteres existentes.

insert_expr

A cadeia de caracteres a ser inserida em base_expr. Se esta cadeia de caracteres estiver vazia, e se len for maior que zero, então efetivamente a operação torna-se uma exclusão (alguns caracteres são excluídos, e nenhum é adicionado).

Notas de uso

  • Os base_expr e insert_expr devem ser do mesmo tipo de dados; ou ambos devem ser cadeias de caracteres (por exemplo, VARCHAR) ou ambos devem ser binários.

  • Se algum dos argumentos for NULL, o valor retornado é NULL.

Retornos

Retorna uma cadeia de caracteres ou BINARY que é equivalente a fazer uma cópia de base_expr, excluindo caracteres começando com len em pos, e depois inserindo insert_expr em pos.

Observe que a entrada original base_expr não é alterada; a função retorna uma cópia separada (modificada).

Exemplos

Este é um exemplo simples:

SELECT INSERT('abc', 1, 2, 'Z') as STR;
+-----+
| STR |
|-----|
| Zc  |
+-----+
Copy

Este exemplo mostra que o comprimento da cadeia de caracteres de substituição pode ser diferente do comprimento da subcadeia de caracteres que está sendo substituído:

SELECT INSERT('abcdef', 3, 2, 'zzz') as STR;
+---------+
| STR     |
|---------|
| abzzzef |
+---------+
Copy

Isto mostra o que acontece quando a cadeia de caracteres de substituição está vazia (a função apaga o número especificado de caracteres começando na posição inicial e não adiciona quaisquer caracteres):

SELECT INSERT('abc', 2, 1, '') as STR;
+-----+
| STR |
|-----|
| ac  |
+-----+
Copy

Isso usa INSERT como uma operação de apêndice, adicionando caracteres imediatamente após o último caractere na cadeia de caracteres original:

SELECT INSERT('abc', 4, 0, 'Z') as STR;
+------+
| STR  |
|------|
| abcZ |
+------+
Copy

Os seguintes retornam todos NULL porque pelo menos um dos argumentos é NULL:

SELECT INSERT(NULL, 1, 2, 'Z') as STR;
+------+
| STR  |
|------|
| NULL |
+------+
Copy
SELECT INSERT('abc', NULL, 2, 'Z') as STR;
+------+
| STR  |
|------|
| NULL |
+------+
Copy
SELECT INSERT('abc', 1, NULL, 'Z') as STR;
+------+
| STR  |
|------|
| NULL |
+------+
Copy
SELECT INSERT('abc', 1, 2, NULL) as STR;
+------+
| STR  |
|------|
| NULL |
+------+
Copy