Substring() i SQL Server: Sådan bruges den med eksempel

⚡ Smart opsummering

SUBSTRING() i SQL Server f.eks.tracts er en del af et tegn, en tekst eller et binært udtryk, der returnerer et bestemt antal tegn fra en valgt startposition og parres naturligt med CHARINDEX til afgrænserbaseret parsing.

  • ✂️ Formål: SUBSTRING() returnerer en specifik del af en streng, givet kildeudtrykket, en startposition og en længde.
  • 🔢 Tre argumenter: Udtrykket, startpositionen og den samlede længde er alle obligatoriske i SQL Server SUBSTRING()-funktionen.
  • 📍 En-baseret indeks: Startpositionen er 1-baseret, så det første tegn tæller som position et, hvilket undgår fejl, der opstår én efter én.
  • 🔎 Med CHARINDEX: Parring af SUBSTRING() med CHARINDEX() finder en afgrænser og et eksempeltracteksten før eller efter den.
  • ↔️ Versus VENSTRE og HØJRE: I modsætning til LEFT() og RIGHT(), f.eks. SUBSTRING()tracts-tegn fra enhver position, ikke kun enderne.
  • ⚠️ Kantsager: En NULL-længde returnerer NULL, mens en længde ud over strengen returnerer resten uden at generere en fejl.

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

Hvad er Substring()?

SUBSTRING() er en funktion i SQL der lader brugeren udlede en delstreng fra en given streng efter behov. SUBSTRING() extracts en streng af en bestemt længde, startende fra en given placering i en inputstreng. Formålet med SUBSTRING() i SQL er at returnere en bestemt del af strengen.

Syntaks for understreng()

SUBSTRING(Expression, Starting Position, Total Length)

Her:

  • SUBSTRING()-udtrykket i SQL Server kan være et hvilket som helst tegn, binær fil, tekst eller billede. Udtrykket er kildestrengen, hvorfra delstrengen hentes.
  • Startposition bestemmer den position i udtrykket, hvorfra den nye delstreng skal starte.
  • Total længde er den samlede forventede længde af den resulterende delstreng fra udtrykket, startende fra startpositionen.

Regler for brug af SUBSTRING()

  • Alle tre argumenter er obligatoriske i MS SQL SUBSTRING()-funktionen.
  • Hvis startpositionen er større end det maksimale antal tegn i udtrykket, returneres der intet af SUBSTRING()-funktionen i SQL Server.
  • Den samlede længde kan overstige den maksimale tegnlængde for den oprindelige streng. I dette tilfælde er den resulterende delstreng hele strengen, startende fra startpositionen i udtrykket til udtrykkets sidste tegn.

Diagrammet nedenfor illustrerer brugen af ​​SUBSTRING()-funktionen i SQL Server:

Diagram der viser hvordan SUBSTRING() extracts-tegn fra en startposition for en given længde

Eksempler på T-SQL-understrenge

Antagelse: Antag, at vi har en tabel med navnet 'Guru99' med to kolonner og fire rækker, som vist nedenfor. Vi bruger denne 'Guru99'-tabel i følgende eksempler:

Guru99 eksempeltabel med kolonnerne Tutorial_ID og Tutorial_name brugt i SUBSTRING-eksemplerne

Forespørgsel 1: SUBSTRING() i SQL med en længde, der er mindre end udtrykkets samlede maksimale længde.

SELECT Tutorial_name, SUBSTRING(Tutorial_name,1,2) As SUB from Guru99;

Resultat: Diagrammet nedenfor viser delstrengen af ​​kolonnen 'Tutorial_name' som kolonnen 'SUB'. Startpositionen er 1, og længden er 2, så de første to tegn returneres:

Resultatgitter, der returnerer de første to tegn i Tutorial_name som SUB-kolonnen

Forespørgsel 2: SUBSTRING() i SQL Server med en længde, der er større end udtrykkets samlede maksimale længde.

SELECT Tutorial_name, SUBSTRING(Tutorial_name,2,8) As SUB from Guru99;

Resultat: Diagrammet nedenfor viser delstrengen i kolonnen 'Tutorial_name' som kolonnen 'SUB'. Selvom delstrengens længde er større end udtrykkets samlede maksimale længde, genereres der ingen fejl, og forespørgslen returnerer hele strengen fra startpositionen og fremefter:

Resultatgitter, der returnerer resten af ​​Tutorial_name, når den ønskede længde overstiger strengen

SUBSTRING med CHARINDEX i SQL Server

En meget almindelig brug af SUBSTRING() i den virkelige verden er f.eks.tractekst, der sidder før eller efter en afgrænser, f.eks. domænet i en e-mailadresse. SUBSTRING() behøver i sig selv en fast startposition, men positionen af ​​en afgrænser varierer fra række til række. Funktionen CHARINDEX() løser dette ved at returnere positionen af ​​et tegn i en streng:

CHARINDEX(substring_to_find, expression [, start_location])

Ved at indlejre CHARINDEX() i SUBSTRING() bliver startpositionen dynamisk. Eksemplet nedenfor finder @ symbol og returnerer alt efter det. variabel indeholder stikprøveværdien:

DECLARE @Email VARCHAR(50) = 'john.doe@guru99.com';
SELECT SUBSTRING(@Email, CHARINDEX('@', @Email) + 1, LEN(@Email)) AS Domain;

Her finder CHARINDEX('@', @Email) @-tegnets position, tilføjer 1 og flytter sig forbi det, og SUBSTRING() derefter extracde resterende tegn. For ovenstående værdi returnerer forespørgslen domænet guru99.comDette CHARINDEX-plus-SUBSTRING-mønster er standardmåden til at parse strukturerede strenge i T-SQL.

SUBSTRING vs. VENSTRE og HØJRE i SQL Server

SQL Server tilbyder også funktionerne LEFT() og RIGHT() til at hente tegn fra starten eller slutningen af ​​en streng. De er kortere at skrive, men de er begrænsede til de to ender. SUBSTRING() er den mest fleksible, fordi den kan starte på enhver position. Tabellen nedenfor sammenligner dem:

Funktion argumenter Extracts fra Ækvivalent SUBSTRING()
VENSTRE(udtryk, n) 2 Start af strengen DELSTRING(udtryk, 1, n)
HØJRE(udtryk, n) 2 Enden af ​​strengen DELSTRING(udtryk, LÆNGDE(udtryk) – n + 1, n)
DELSTRING(udtryk, start, længde) 3 Enhver stilling Ikke relevant

Kort sagt er LEFT() og RIGHT() praktiske genveje til enderne af en streng, mens SUBSTRING() håndterer store og små bogstaver, inklusive tegn taget fra midten.

Negative, nul- og NULL-argumenter i SUBSTRING

Ud over de grundlæggende regler er det nyttigt at vide, hvordan SUBSTRING() opfører sig i kanterne. Når startpositionen er nul eller negativ, beregner SQL Server en effektiv længde på (start + længde – 1) og begynder at læse fra position et. Når et argument er NULL, er resultatet NULL. Tabellen nedenfor, verificeret mod den officielle DELSTRING (Transact-SQL) reference, viser disse tilfælde:

Ring til os på Resultat Årsag
DELSTRING('Guru99', 1, 4) Guru Normalt opkald: fire tegn fra position et.
DELSTRING('Guru99', 0, 3) Gu Start under én: effektiv længde er 0 + 3 – 1 = 2.
DELSTRING('Guru99', 4, 100) u99 Længde ud over strengen returnerer resten uden fejl.
DELSTRING('Guru99', 3, NULL) NULL Et NULL-argument gør hele resultatet til NULL.

Kendskab til disse kanttilfælde forhindrer overraskelser, når startpositionen beregnes ud fra en anden kolonne eller en variabel det kunne være nul eller NULL.

Ofte Stillede Spørgsmål

SQL Server bruger SUBSTRING(); SUBSTR() er navnet, der bruges i Oracle og MySQLBegge returnerer en del af en streng, men SUBSTRING() er standardfunktionen i Transact-SQL, så SUBSTR() vil ikke køre på SQL Server.

Ja. Fordi SUBSTRING() returnerer en værdi, kan den vises i WHERE-, SELECT- og ORDER BY-klausulerne. Filtrering på SUBSTRING() forhindrer normalt en indekssøgning, så et LIKE-mønster er ofte hurtigere til præfikssøgninger.

Ja, men SQL Server konverterer først værdien til en streng, enten implicit eller via CAST eller CONVERT. Startpositionen og længden tæller derefter tegn, ikke cifre eller datodele, så formater værdien omhyggeligt.

Tre-argumentformen opfører sig på samme måde, men detaljerne varierer. MySQL tillader også SUBSTR() og negative startpositioner, mens SQL Server bruger SUBSTRING() og behandler en start under én ved hjælp af en regel for effektiv længde.

SUBSTRING() returnerer den samme kategori som sit input: varchar for tegndata, nvarchar for Unicode-tekst og varbinary for binære udtryk. Længden afhænger af den anmodede delstreng, ikke af hele kildekolonnen.

Wrapping En kolonne i SUBSTRING() inde i en WHERE-klausul gør prædikatet ikke-sargbart, så SQL Server kan ikke bruge en indekssøgning på den kolonne. For præfiksmatches fungerer et LIKE 'value%'-mønster normalt bedre.

Ja. GitHub Copilot kan udarbejde SUBSTRING()- og CHARINDEX()-udtryk, inklusive afgrænserbaseret parsing, fra en prompt i naturligt sprog. Bekræft altid startpositionen, længden og den 1-baserede indeksering, før forespørgslen køres.

AI- og maskinlæringsassistenter oversætter regler på almindeligt engelsk til kombinationer af SUBSTRING(), CHARINDEX(), LEFT() og RIGHT(), foreslår længdeberegninger og markerer fejl, der kun er én ad gangen. Udvikleren gennemgår hvert forslag for korrekthed, før det implementeres.

Opsummer dette indlæg med: