I SQL Server kan du använda T-SQL STUFF()
funktion för att infoga en sträng i en annan sträng. Detta gör att du kan göra saker som att infoga ett ord på en specifik position. Det låter dig också ersätta ett ord på en specifik position.
Här är den officiella syntaxen:
STUFF ( character_expression , start , length , replaceWith_expression )
character_expression
är originalsträngen. Detta kan faktiskt vara en konstant, variabel eller kolumn med antingen tecken eller binär data.start
anger startpositionen (dvs. där den nya strängen kommer att infogas).length
är hur många tecken som ska tas bort från den ursprungliga strängen.replaceWith_expression
är strängen som infogas.replaceWith_expression
kan vara en konstant, variabel eller kolumn med antingen tecken eller binär data.
Ersätt ett ord
Här är ett exempel där jag ersätter ett ord i en sträng.
SELECT STUFF('Cats and dogs', 6, 3, 'like');
Resultat:
Cats like dogs
I det här fallet anger jag att ordet like
ska infogas vid position 6, och att 3 tecken ska tas bort från den ursprungliga strängen (detta tar bort ordet and
). Alltså ordet and
raderas och ordet like
är infogat.
Infoga ett ord
Här är ett exempel på att infoga ett ord utan att ta bort något från den ursprungliga strängen:
SELECT STUFF('Cats and dogs', 10, 0, 'big ');
Resultat:
Cats and big dogs
Ingenting raderas från den ursprungliga strängen eftersom jag angav 0
som det tredje argumentet.
Värden utanför intervallet
Om startpositionen är utanför längden på den ursprungliga strängen, returneras ett NULL-värde.
Exempel:
SELECT STUFF('Cats and dogs', 20, 4, 'rabbits');
Resultat:
NULL
I det här fallet är den ursprungliga strängen inte 20 tecken lång, så resultatet är NULL
.
Samma sak händer om du anger 0
eller ett negativt tal:
SELECT STUFF('Cats and dogs', -1, 4, 'rabbits');
Resultat:
NULL
Resultatet av dessa exempel står i kontrast till MySQL:s INSERT()
funktion, som skulle ha returnerat den ursprungliga strängen i detta scenario. MySQL:s INSERT()
gör i princip samma sak som T-SQL:s STUFF()
(förutom fall som dessa).
Infoga NULL-värden
Om du infogar ett NULL-värde kommer ditt resultat helt enkelt att ta bort det angivna antalet tecken från den angivna positionen. Med andra ord, ingenting infogas, men tecken tas fortfarande bort som specificerat.
Exempel:
SELECT STUFF('Cats and dogs', 6, 3, NULL);
Resultat:
Cats dogs
Detta är ett annat område där MySQL skiljer sig från T-SQL. Gör det här exemplet med MySQL:s INSERT()
funktion skulle ha returnerat ett resultat av NULL
.