Dans SQL Server, vous pouvez utiliser le T-SQL STUFF()
fonction pour insérer une chaîne dans une autre chaîne. Cela vous permet de faire des choses comme insérer un mot à une position spécifique. Il vous permet également de remplacer un mot à une position spécifique.
Voici la syntaxe officielle :
STUFF ( character_expression , start , length , replaceWith_expression )
character_expression
est la chaîne d'origine. Il peut en fait s'agir d'une constante, d'une variable ou d'une colonne de données binaires ou de caractères.start
spécifie la position de départ (c'est-à-dire où la nouvelle chaîne sera insérée).length
correspond au nombre de caractères à supprimer de la chaîne d'origine.replaceWith_expression
est la chaîne qui est insérée.replaceWith_expression
peut être une constante, une variable ou une colonne de caractères ou de données binaires.
Remplacer un mot
Voici un exemple où je remplace un mot dans une chaîne.
SELECT STUFF('Cats and dogs', 6, 3, 'like');
Résultat :
Cats like dogs
Dans ce cas, je précise que le mot like
doit être inséré à la position 6, et que 3 caractères doivent être supprimés de la chaîne d'origine (cela supprime le mot and
). Donc le mot and
est supprimé et le mot like
est inséré.
Insérer un mot
Voici un exemple d'insertion d'un mot sans rien supprimer de la chaîne d'origine :
SELECT STUFF('Cats and dogs', 10, 0, 'big ');
Résultat :
Cats and big dogs
Rien n'est supprimé de la chaîne d'origine car j'ai spécifié 0
comme troisième argument.
Valeurs hors plage
Si la position de départ est en dehors de la longueur de la chaîne d'origine, une valeur NULL est renvoyée.
Exemple :
SELECT STUFF('Cats and dogs', 20, 4, 'rabbits');
Résultat :
NULL
Dans ce cas, la chaîne d'origine ne contient pas 20 caractères, le résultat est donc NULL
.
La même chose se produit si vous fournissez 0
ou un nombre négatif :
SELECT STUFF('Cats and dogs', -1, 4, 'rabbits');
Résultat :
NULL
Le résultat de ces exemples est en contraste avec le INSERT()
de MySQL fonction, qui aurait renvoyé la chaîne d'origine dans ce scénario. INSERT()
de MySQL fait fondamentalement la même chose que STUFF()
de T-SQL (sauf dans des cas comme ceux-ci).
Insérer des valeurs NULL
Si vous insérez une valeur NULL, votre résultat supprimera simplement le nombre indiqué de caractères de la position indiquée. En d'autres termes, rien n'est inséré, mais les caractères sont toujours supprimés comme spécifié.
Exemple :
SELECT STUFF('Cats and dogs', 6, 3, NULL);
Résultat :
Cats dogs
C'est un autre domaine où MySQL diffère de T-SQL. Faire cet exemple avec INSERT()
de MySQL la fonction aurait renvoyé un résultat de NULL
.