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.

  • ✂️ Syfte: SUBSTRING() returnerar en specifik del av en sträng, givet källuttrycket, en startposition och en längd.
  • 🔢 Tre argument: Uttrycket, startpositionen och den totala längden är alla obligatoriska i SQL Server SUBSTRING()-funktionen.
  • 📍 Enbaserat index: Startpositionen är 1-baserad, så det första tecknet räknas som position ett, vilket undviker misstag som uppstår efter ett.
  • 🔎 Med CHARINDEX: Att para ihop SUBSTRING() med CHARINDEX() lokaliserar en avgränsare och ett exempeltractexten före eller efter den.
  • ↔️ Mot VÄNSTER och HÖGER: Till skillnad från LEFT() och RIGHT(), SUBSTRING() ex.tracts-tecken från vilken position som helst, inte bara ändarna.
  • ⚠️ Kantfall: En NULL-längd returnerar NULL, medan en längd bortom strängen returnerar resten utan att orsaka ett fel.

SUBSTRING()-funktion i SQL Server med T-SQL-exempel

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:

Diagram som visar hur SUBSTRING() extracts-tecken från en startposition för en given längd

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:

Guru99 exempeltabeller med kolumnerna Tutorial_ID och Tutorial_name som används i SUBSTRING-exemplen

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:

Resultatrutnätet som returnerar de två första tecknen i Handledningsnamn som SUB-kolumnen

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:

Resultatrutnät som returnerar resten av Handledningsnamn när den begärda längden överstiger strängen

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.

Vanliga frågor

SQL Server använder SUBSTRING(); SUBSTR() är namnet som används i Oracle och MySQLBåda returnerar en del av en sträng, men SUBSTRING() är standardfunktionen i Transact-SQL, så SUBSTR() kommer inte att köras på SQL Server.

Ja. Eftersom SUBSTRING() returnerar ett värde kan det visas i WHERE-, SELECT- och ORDER BY-klausulerna. Filtrering på SUBSTRING() förhindrar vanligtvis en indexsökning, så ett LIKE-mönster är ofta snabbare för prefixsökningar.

Ja, men SQL Server konverterar först värdet till en sträng, antingen implicit eller via CAST eller CONVERT. Startpositionen och längden räknar sedan tecken, inte siffror eller datumdelar, så formatera värdet noggrant.

Treargumentformen beter sig på liknande sätt, men detaljerna skiljer sig åt. MySQL tillåter även SUBSTR() och negativa startpositioner, medan SQL Server använder SUBSTRING() och behandlar en start under ett med hjälp av en regel för effektiv längd.

SUBSTRING() returnerar samma kategori som dess indata: varchar för teckendata, nvarchar för Unicode-text och varbinary för binära uttryck. Längden beror på den begärda delsträngen, inte på hela källkolumnen.

Wrapping En kolumn i SUBSTRING() inuti en WHERE-klausul gör predikatet icke-sargbart, så SQL Server kan inte använda en indexsökning på den kolumnen. För prefixmatchningar fungerar ett LIKE 'value%'-mönster vanligtvis bättre.

Ja. GitHub Copilot kan utarbeta SUBSTRING()- och CHARINDEX()-uttryck, inklusive avgränsningsbaserad parsning, från en naturligt språkprompt. Verifiera alltid startposition, längd och 1-baserad indexering innan du kör frågan.

AI- och maskininlärningsassistenter översätter regler på vanlig engelska till kombinationer av SUBSTRING(), CHARINDEX(), LEFT() och RIGHT(), föreslår längdberäkningar och flaggar fel som går i rad. Utvecklaren granskar varje förslag för att säkerställa att det är korrekt innan det distribueras.

Sammanfatta detta inlägg med: