Substring() i SQL Server: Hur man använder det med exempel
⚡ Smart sammanfattning
SUBSTRING() i SQL Server extracts en del av ett tecken, en text eller ett binärt uttryck, som returnerar ett visst antal tecken från en vald startposition och parar ihop naturligt med CHARINDEX för avgränsarbaserad parsning.
Vad är Substring()?
SUBSTRING() är en funktion i SQL som låter användaren härleda en delsträng från en given sträng efter behov. SUBSTRING() extracts en sträng med en specificerad längd, med början från en given plats i en inmatningssträng. Syftet med SUBSTRING() i SQL är att returnera en specifik del av strängen.
Syntax för Substring()
SUBSTRING(Expression, Starting Position, Total Length)
Här:
- SUBSTRING()-uttrycket i SQL Server kan vara vilket tecken, binär fil, text eller bild som helst. Uttrycket är källsträngen från vilken delsträngen hämtas.
- Startposition anger positionen i uttrycket där den nya delsträngen ska börja.
- Total längd är den totala förväntade längden på den resulterande delsträngen från uttrycket, med början från startpositionen.
Regler för att använda SUBSTRING()
- Alla tre argumenten är obligatoriska i MS SQL SUBSTRING()-funktionen.
- Om startpositionen är större än det maximala antalet tecken i uttrycket, returneras ingenting av SUBSTRING()-funktionen i SQL Server.
- Totallängden kan överstiga den maximala teckenlängden för den ursprungliga strängen. I det här fallet är den resulterande delsträngen hela strängen, från startpositionen i uttrycket till det sista tecknet i uttrycket.
Diagrammet nedan illustrerar användningen av SUBSTRING()-funktionen i SQL Server:
Exempel på T-SQL-delsträngar
Antagande: Antag att vi har en tabell med namnet 'Guru99' med två kolumner och fyra rader, som visas nedan. Vi kommer att använda detta 'Guru99'-tabellen i följande exempel:
Fråga 1: SUBSTRING() i SQL med en längd som är kortare än uttryckets totala maximala längd.
SELECT Tutorial_name, SUBSTRING(Tutorial_name,1,2) As SUB from Guru99;
Resultat: Diagrammet nedan visar delsträngen i kolumnen 'Handledningsnamn' som kolumnen 'DEL'. Startpositionen är 1 och längden är 2, så de två första tecknen returneras:
Fråga 2: SUBSTRING() i SQL Server med en längd som är större än uttryckets totala maximala längd.
SELECT Tutorial_name, SUBSTRING(Tutorial_name,2,8) As SUB from Guru99;
Resultat: Diagrammet nedan visar delsträngen i kolumnen 'Handledningsnamn' som kolumnen 'DEL'. Även om delsträngens längd är större än uttryckets totala maximala längd, genereras inget fel och frågan returnerar hela strängen från startpositionen och framåt:
DELSTRÄNG med CHARINDEX i SQL Server
En mycket vanlig användning av SUBSTRING() i verkligheten är att t.ex.tractext som sitter före eller efter ett avgränsningstecken, till exempel domänen i en e-postadress. SUBSTRING() behöver en fast startposition i sig självt, men positionen för ett avgränsningstecken varierar från rad till rad. Funktionen CHARINDEX() löser detta genom att returnera positionen för ett tecken inuti en sträng:
CHARINDEX(substring_to_find, expression [, start_location])
Genom att nästla CHARINDEX() inuti SUBSTRING() blir startpositionen dynamisk. Exemplet nedan hittar @ symbolen och returnerar allt efter den. variabel innehåller exempelvärdet:
DECLARE @Email VARCHAR(50) = 'john.doe@guru99.com'; SELECT SUBSTRING(@Email, CHARINDEX('@', @Email) + 1, LEN(@Email)) AS Domain;
Här lokaliserar CHARINDEX('@', @Email) positionen för @-tecknet, lägger till 1 flyttar förbi det, och SUBSTRING() sedan extracts de återstående tecknen. För värdet ovan returnerar frågan domänen guru99.comDetta CHARINDEX-plus-SUBSTRING-mönster är standardsättet att analysera strukturerade strängar i T-SQL.
DELSTRÄNG kontra VÄNSTER och HÖGER i SQL Server
SQL Server erbjuder även funktionerna LEFT() och RIGHT() för att hämta tecken från början eller slutet av en sträng. De är kortare att skriva, men de är begränsade till de två ändarna. SUBSTRING() är den mest flexibla eftersom den kan börja på vilken position som helst. Tabellen nedan jämför dem:
| Funktion | Argument | Extracts från | Ekvivalent DELSTRÄNG() |
| VÄNSTER(uttryck, n) | 2 | Början av strängen | DELSTRÄNG(uttryck, 1, n) |
| HÖGER(uttryck, n) | 2 | Slutet på strängen | DELSTRING(uttryck, LEN(uttryck) – n + 1, n) |
| DELSTRÄNG(uttryck, start, längd) | 3 | Vilken position som helst | ej tillämplig |
Kort sagt, LEFT() och RIGHT() är praktiska genvägar för slutet av en sträng, medan SUBSTRING() hanterar gemenska tecken, inklusive tecken tagna från mitten.
Negativa, noll- och NULL-argument i SUBSTRING
Utöver de grundläggande reglerna är det bra att veta hur SUBSTRING() beter sig vid kanterna. När startpositionen är noll eller negativ beräknar SQL Server en effektiv längd på (start + längd – 1) och börjar läsa från position ett. När något argument är NULL är resultatet NULL. Tabellen nedan, verifierad mot den officiella DELSTRÄNG (Transact-SQL) referens, visar dessa fall:
| Ring upp | Resultat | Orsak |
| DELSTRÄNG('Guru99', 1, 4) | Guru | Normalt anrop: fyra tecken från position ett. |
| DELSTRÄNG('Guru99', 0, 3) | Gu | Börja under ett: effektiv längd är 0 + 3 – 1 = 2. |
| DELSTRÄNG('Guru99', 4, 100) | u99 | Längd bortom strängen returnerar resten utan fel. |
| DELSTRÄNG('Guru99', 3, NULL) | NULL | Ett NULL-argument gör hela resultatet till NULL. |
Att känna till dessa kantfall förhindrar överraskningar när startpositionen beräknas från en annan kolumn eller en variabel som kan vara noll eller NULL.





