Catégories :

Fonctions de chaîne et fonctions binaires (Général)

INSERT

Remplace une sous-chaîne de la longueur spécifiée, en commençant à la position spécifiée, par une nouvelle chaîne ou une nouvelle valeur binaire.

Cette fonction ne doit pas être confondue avec la commande INSERT DML.

Syntaxe

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

Arguments

expr_base

Chaîne ou expression BINARY pour laquelle vous souhaitez insérer/remplacer des caractères.

pos

Le décalage auquel commencer à insérer des caractères. Ceci est basé sur 1, pas sur 0. En d’autres termes, le premier caractère de la chaîne est considéré comme étant à la position 1 et non à la position 0. Par exemple, pour une insertion en début de chaîne, définir pos sur 1.

Les valeurs valides sont comprises entre 1 et une de plus que la longueur de la chaîne (incluse).

Si vous définissez pos sur une longueur supérieure à celle de la chaîne, l’opération est équivalente à une opération d’ajout. (Cela nécessite également que le paramètre long soit égal à 0, car vous ne devez pas essayer de supprimer des caractères au-delà du dernier caractère.)

long

Nombre de caractères (à partir de pos) à remplacer. Les valeurs valides vont de 0 au nombre de caractères compris entre pos et la fin de la chaîne. S’il s’agit de 0, cela signifie d’ajouter les nouveaux caractères sans supprimer aucun caractère existant.

expr_insert

La chaîne à insérer dans expr_base. Si cette chaîne est vide et si long est supérieur à zéro, l’opération devient alors une suppression (certains caractères sont supprimés et aucun n’est ajouté).

Notes sur l’utilisation

  • expr_base et expr_insert doivent être du même type de données ; l’un ou l’autre doivent être une chaîne (par exemple VARCHAR) ou doivent être binaires.

  • Si l’un des arguments est NULL, la valeur renvoyée est NULL.

Renvoie

Renvoie une chaîne ou un BINARY qui équivaut à créer une copie de expr_base, en supprimant les caractères long commençant par pos, puis en insérant expr_insert au niveau de pos.

Notez que l’entrée d’origine expr_base n’est pas modifiée. La fonction renvoie une copie séparée (modifiée).

Exemples

Voici un exemple simple :

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

Cet exemple montre que la longueur de la chaîne de remplacement peut être différente de celle de la sous-chaîne remplacée :

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

Cela montre ce qui se passe lorsque la chaîne de remplacement est vide (nous supprimons le nombre spécifié de caractères à partir de la position de départ et nous n’ajoutons aucun caractère) :

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

Ceci utilise INSERT en tant qu’opération d’ajout, en ajoutant des caractères immédiatement après le dernier caractère de la chaîne d’origine :

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

Tous les éléments suivants renvoient NULL, car au moins l’un des arguments est 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 |
+------+