Substring() in SQL Server: hoe te gebruiken met een voorbeeld

⚡ Slimme samenvatting

SUBSTRING() in SQL Server voorbeeldtracts retourneert een gedeelte van een teken, tekst of binaire expressie, waarbij een vast aantal tekens vanaf een gekozen startpositie wordt geretourneerd, en vormt een natuurlijke combinatie met CHARINDEX voor parsing op basis van scheidingstekens.

  • ✂️ Doel: SUBSTRING() retourneert een specifiek gedeelte van een tekenreeks, gegeven de bronuitdrukking, een startpositie en een lengte.
  • 🔢 Drie argumenten: De expressie, de startpositie en de totale lengte zijn allemaal verplicht in de SQL Server SUBSTRING()-functie.
  • 📍 Index op basis van één: De startpositie is 1-gebaseerd, dus het eerste teken telt als positie één, wat fouten door een verschuiving van één positie voorkomt.
  • 🔎 Met CHARINDEX: Door SUBSTRING() te combineren met CHARINDEX() wordt een scheidingsteken gevonden en vervolgens geëxtraheerd.tracts de tekst ervoor of erna.
  • ↔️ Versus LINKS en RECHTS: In tegenstelling tot LEFT() en RIGHT(), SUBSTRING() extracts-tekens vanaf elke positie, niet alleen vanaf de uiteinden.
  • ⚠️ Randgevallen: Een lengte van NULL retourneert NULL, terwijl een lengte die de tekenreeks overschrijdt het resterende deel retourneert zonder een foutmelding te geven.

De SUBSTRING()-functie in SQL Server met T-SQL-voorbeelden

Wat is Subtekenreeks()?

SUBSTRING() is een functie in SQL waarmee de gebruiker naar behoefte een substring uit een willekeurige string kan afleiden. SUBSTRING() extracts is een tekenreeks van een opgegeven lengte, beginnend vanaf een bepaalde locatie in een invoertekenreeks. Het doel van SUBSTRING() in SQL is om een ​​specifiek gedeelte van de tekenreeks terug te geven.

Syntaxis voor Subtekenreeks()

SUBSTRING(Expression, Starting Position, Total Length)

Hier:

  • De SUBSTRING()-expressie in SQL Server De expressie kan elk willekeurig teken, binair getal, tekst of afbeelding zijn. De expressie is de bronstring waaruit de substring wordt opgehaald.
  • De startpositie bepaalt de positie in de expressie waar de nieuwe substring moet beginnen.
  • Totale lengte is de totale verwachte lengte van de resulterende substring uit de expressie, beginnend bij de startpositie.

Regels voor het gebruik van SUBSTRING()

  • Alle drie de argumenten zijn verplicht in de MS SQL SUBSTRING()-functie.
  • Als de startpositie groter is dan het maximale aantal tekens in de expressie, retourneert de SUBSTRING()-functie in SQL Server niets.
  • De totale lengte kan de maximale tekenlengte van de oorspronkelijke tekenreeks overschrijden. In dat geval is de resulterende subtekenreeks de volledige tekenreeks, vanaf de startpositie in de expressie tot het laatste teken van de expressie.

Onderstaand diagram illustreert het gebruik van de SUBSTRING()-functie in SQL Server:

Diagram dat laat zien hoe SUBSTRING() werkttracts tekens vanaf een startpositie voor een bepaalde lengte

Voorbeelden van T-SQL-subtekenreeksen

Aanname: We gaan ervan uit dat we een tabel hebben met de naam 'Guru99' met twee kolommen en vier rijen, zoals hieronder weergegeven. We zullen deze ' gebruikenGuruTabel 99 in de volgende voorbeelden:

Guru99 voorbeeldtabellen met de kolommen Tutorial_ID en Tutorial_name die in de SUBSTRING-voorbeelden worden gebruikt.

Vraag 1: SUBSTRING() in SQL met een lengte die kleiner is dan de totale maximale lengte van de expressie.

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

Resultaat: Het onderstaande diagram toont de substring van de kolom 'Tutorial_name' als de kolom 'SUB'. De startpositie is 1 en de lengte is 2, dus de eerste twee tekens worden weergegeven:

Resultaatraster dat de eerste twee tekens van Tutorial_name als SUB-kolom weergeeft.

Vraag 2: SUBSTRING() in SQL Server met een lengte die groter is dan de totale maximale lengte van de expressie.

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

Resultaat: Het onderstaande diagram toont de substring van de kolom 'Tutorial_name' als de kolom 'SUB'. Hoewel de lengte van de substring groter is dan de totale maximale lengte van de expressie, wordt er geen foutmelding gegenereerd en retourneert de query de volledige tekenreeks vanaf de beginpositie:

Resultaatraster dat de rest van Tutorial_name retourneert wanneer de gevraagde lengte de opgegeven tekenreeks overschrijdt.

SUBSTRING met CHARINDEX in SQL Server

Een veelvoorkomend praktisch gebruik van SUBSTRING() is om uit te drukkentract tekst die voor of na een scheidingsteken staat, zoals het domein in een e-mailadres. SUBSTRING() vereist op zichzelf een vaste startpositie, maar de positie van een scheidingsteken varieert van regel tot regel. De CHARINDEX() functie lost dit op door de positie van een teken binnen een tekenreeks terug te geven:

CHARINDEX(substring_to_find, expression [, start_location])

Door CHARINDEX() binnen SUBSTRING() te nesten, wordt de startpositie dynamisch. Het onderstaande voorbeeld vindt de @ symbool en retourneert alles wat erna komt. A variabele bevat de voorbeeldwaarde:

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

Hier bepaalt CHARINDEX('@', @Email) de positie van het @-symbool, door er 1 bij op te tellen gaat het symbool verder, en vervolgens gebruikt SUBSTRING() extracts de resterende tekens. Voor de bovenstaande waarde retourneert de query het domein. guru99.comDit CHARINDEX-plus-SUBSTRING-patroon is de standaardmanier om gestructureerde tekenreeksen in T-SQL te parseren.

SUBSTRING versus LEFT en RIGHT in SQL Server

SQL Server biedt ook de functies LEFT() en RIGHT() om tekens vanaf het begin of einde van een tekenreeks te halen. Deze functies zijn korter om te schrijven, maar ze zijn beperkt tot de twee uiteinden. SUBSTRING() is het meest flexibel omdat deze op elke willekeurige positie kan beginnen. De onderstaande tabel vergelijkt ze:

Functie argumenten Extracts van Equivalent SUBSTRING()
LINKS(uitdrukking, n) 2 Begin van de reeks SUBSTRING(expressie, 1, n)
RECHTS(uitdrukking, n) 2 Einde van de string SUBSTRING(expressie, LEN(expressie) – n + 1, n)
SUBSTRING(uitdrukking, begin, lengte) 3 Elke positie Niet van toepassing

Kort gezegd zijn LEFT() en RIGHT() handige snelkoppelingen voor de uiteinden van een tekenreeks, terwijl SUBSTRING() het algemene geval afhandelt, inclusief tekens die uit het midden worden gehaald.

Negatieve, nul- en NULL-argumenten in SUBSTRING

Naast de basisregels is het handig om te weten hoe SUBSTRING() zich gedraagt ​​aan de randen. Wanneer de startpositie nul of negatief is, berekent SQL Server een effectieve lengte van (start + lengte – 1) en begint te lezen vanaf positie één. Wanneer een argument NULL is, is het resultaat NULL. De onderstaande tabel is geverifieerd aan de hand van de officiële gegevens. SUBSTRING (Transact-SQL) De referentie toont deze gevallen:

Bel Resultaat Reden
SUBSTRING('Guru99', 1, 4) Guru Normale aanroep: vier tekens vanaf positie één.
SUBSTRING('Guru99', 0, 3) Gu Begin onder de één: de effectieve lengte is 0 + 3 – 1 = 2.
SUBSTRING('Guru99', 4, 100) u99 Als de lengte de tekenreeks overschrijdt, wordt het resterende deel zonder foutmelding geretourneerd.
SUBSTRING('Guru99', 3, NULL) NULL Een NULL-argument maakt het hele resultaat NULL.

Door deze randgevallen te kennen, worden verrassingen voorkomen wanneer de startpositie wordt berekend vanuit een andere kolom of een variabele Dat kan nul of NULL zijn.

Veelgestelde vragen

SQL Server gebruikt SUBSTRING(); SUBSTR() is de naam die wordt gebruikt in Oracle en MySQLBeide functies retourneren een deel van een tekenreeks, maar SUBSTRING() is de standaard Transact-SQL-functie, dus SUBSTR() werkt niet op SQL Server.

Ja. Omdat SUBSTRING() een waarde retourneert, kan deze voorkomen in de WHERE-, SELECT- en ORDER BY-clausules. Filteren op SUBSTRING() voorkomt meestal een indexzoekactie, waardoor een LIKE-patroon vaak sneller is voor zoekopdrachten op basis van een voorvoegsel.

Ja, maar SQL Server converteert de waarde eerst naar een tekenreeks, impliciet of via CAST of CONVERT. De startpositie en lengte tellen dan tekens, niet cijfers of datumonderdelen, dus formatteer de waarde zorgvuldig.

De vorm met drie argumenten gedraagt ​​zich op vergelijkbare wijze, maar de details verschillen. MySQL Het ondersteunt ook SUBSTR() en negatieve startposities, terwijl SQL Server SUBSTRING() gebruikt en een startpositie kleiner dan één behandelt met behulp van een effectieve-lengteregel.

SUBSTRING() retourneert dezelfde categorie als de invoer: varchar voor tekenreeksen, nvarchar voor Unicode-tekst en varbinary voor binaire expressies. De lengte is afhankelijk van de gevraagde substring, niet van de hele bronkolom.

Wikkelping Als een kolom in SUBSTRING() binnen een WHERE-clausule wordt gebruikt, wordt het predicaat niet-sargable, waardoor SQL Server geen indexzoekactie op die kolom kan uitvoeren. Voor prefix-matches presteert een LIKE 'value%'-patroon meestal beter.

Ja. GitHub-copiloot U kunt SUBSTRING() en CHARINDEX() expressies opstellen, inclusief parsing op basis van scheidingstekens, vanuit een prompt in natuurlijke taal. Controleer altijd de startpositie, de lengte en de indexering op basis van 1 voordat u de query uitvoert.

AI en machine learning-assistenten vertalen regels in gewone Engelse tekst naar combinaties van SUBSTRING(), CHARINDEX(), LEFT() en RIGHT(), stellen lengteberekeningen voor en signaleren fouten die met één letter afwijken. De ontwikkelaar controleert elke suggestie op juistheid voordat deze wordt geïmplementeerd.

Vat dit bericht samen met: