I SQL Server kan du bruge T-SQL STUFF()
funktion til at indsætte en streng i en anden streng. Dette giver dig mulighed for at gøre ting som at indsætte et ord på en bestemt position. Det giver dig også mulighed for at erstatte et ord på en bestemt position.
Her er den officielle syntaks:
STUFF ( character_expression , start , length , replaceWith_expression )
character_expression
er den originale streng. Dette kan faktisk være en konstant, variabel eller kolonne med enten tegn eller binære data.start
angiver startpositionen (dvs. hvor den nye streng vil blive indsat).length
er, hvor mange tegn der skal slettes fra den originale streng.replaceWith_expression
er den streng, der indsættes.replaceWith_expression
kan være en konstant, variabel eller kolonne af enten tegn eller binære data.
Erstat et Word
Her er et eksempel, hvor jeg erstatter et ord i en streng.
SELECT STUFF('Cats and dogs', 6, 3, 'like');
Resultat:
Cats like dogs
I dette tilfælde angiver jeg, at ordet like
skal indsættes ved position 6, og at 3 tegn skal slettes fra den oprindelige streng (dette sletter ordet and
). Altså ordet and
slettes og ordet like
er indsat.
Indsæt et ord
Her er et eksempel på at indsætte et ord uden at slette noget fra den originale streng:
SELECT STUFF('Cats and dogs', 10, 0, 'big ');
Resultat:
Cats and big dogs
Intet er slettet fra den originale streng, fordi jeg har angivet 0
som det tredje argument.
Værdier uden for område
Hvis startpositionen er uden for længden af den oprindelige streng, returneres en NULL-værdi.
Eksempel:
SELECT STUFF('Cats and dogs', 20, 4, 'rabbits');
Resultat:
NULL
I dette tilfælde er den originale streng ikke 20 tegn lang, så resultatet er NULL
.
Det samme sker, hvis du angiver 0
eller et negativt tal:
SELECT STUFF('Cats and dogs', -1, 4, 'rabbits');
Resultat:
NULL
Resultatet af disse eksempler er i modsætning til MySQL's INSERT()
funktion, som ville have returneret den oprindelige streng i dette scenarie. MySQL's INSERT()
gør stort set det samme som T-SQL's STUFF()
(bortset fra tilfælde som disse).
Indsættelse af NULL-værdier
Hvis du indsætter en NULL-værdi, vil dit resultat blot fjerne det angivne antal tegn fra den angivne position. Der er med andre ord ikke indsat noget, men tegn fjernes stadig som angivet.
Eksempel:
SELECT STUFF('Cats and dogs', 6, 3, NULL);
Resultat:
Cats dogs
Dette er et andet område, hvor MySQL adskiller sig fra T-SQL. Gør dette eksempel med MySQL's INSERT()
funktion ville have returneret et resultat af NULL
.