Substring() în SQL Server: Cum se utilizează cu un exemplu

⚡ Rezumat inteligent

SUBSTRING() în SQL Server extracreprezintă o porțiune a unui caracter, text sau expresie binară, returnând un număr stabilit de caractere dintr-o poziție inițială aleasă și se împerechează în mod natural cu CHARINDEX pentru analiza bazată pe delimitatori.

  • ✂️ Scop: SUBSTRING() returnează o porțiune specifică a unui șir de caractere, având în vedere expresia sursă, o poziție de început și o lungime.
  • 🔢 Trei argumente: Expresia, poziția inițială și lungimea totală sunt obligatorii în funcția SUBSTRING() din SQL Server.
  • 📍 Index cu o bază unică: Poziția de pornire este pe baza 1, deci primul caracter contează ca poziția unu, ceea ce evită greșelile de abatere de la unu.
  • 🔎 Cu CHARINDEX: Împerecherea SUBSTRING() cu CHARINDEX() localizează un delimitator și extraceste textul dinaintea sau de după acesta.
  • ↔️ Față de STÂNGĂ și DREAPTĂ: Spre deosebire de LEFT() și RIGHT(), SUBSTRING() extraccaractere ts din orice poziție, nu doar de la capete.
  • ⚠️ Cazuri limită: O lungime NULL returnează NULL, în timp ce o lungime dincolo de șir returnează restul fără a genera o eroare.

Funcția SUBSTRING() în SQL Server cu exemple T-SQL

Ce este Substring()?

SUBSTRING() este o funcție din SQL care permite utilizatorului să derive un subșir din orice șir dat, după cum este necesar. SUBSTRING() extracts reprezintă un șir de caractere cu o lungime specificată, începând dintr-o locație dată într-un șir de intrare. Scopul funcției SUBSTRING() în SQL este de a returna o porțiune specifică a șirului.

Sintaxa pentru substring()

SUBSTRING(Expression, Starting Position, Total Length)

Aici:

  • Expresia SUBSTRING() din SQL Server poate fi orice caracter, binar, text sau imagine. Expresia este șirul sursă din care este preluat subșirul.
  • Poziția de pornire determină poziția din expresie de unde ar trebui să înceapă noul subșir.
  • Lungimea totală este lungimea totală așteptată a subșirului rezultat din Expresie, începând de la Poziția de pornire.

Reguli pentru utilizarea SUBSTRING()

  • Toate cele trei argumente sunt obligatorii în funcția MS SQL SUBSTRING().
  • Dacă Poziția de pornire este mai mare decât numărul maxim de caractere din Expresie, atunci funcția SUBSTRING() din SQL Server nu returnează nimic.
  • Lungimea totală poate depăși lungimea maximă de caractere a șirului original. În acest caz, subșirul rezultat este întregul șir, începând de la Poziția de pornire din Expresie până la ultimul caracter al Expresiei.

Diagrama de mai jos ilustrează utilizarea funcției SUBSTRING() în SQL Server:

Diagramă care arată cum se execută SUBSTRING()traccaractere ts dintr-o poziție de pornire pentru o lungime dată

Exemple de subșiruri T-SQL

Presupunere: Presupunem că avem un tabel numit 'Guru99' cu două coloane și patru rânduri, așa cum se arată mai jos. Vom folosi acest 'GuruTabelul 99' din următoarele exemple:

Guru99 de exemple de tabele cu coloanele Tutorial_ID și Tutorial_name utilizate în exemplele SUBSTRING

Întrebarea 1: SUBSTRING() în SQL cu o lungime mai mică decât lungimea maximă totală a expresiei.

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

Rezultat: Diagrama de mai jos afișează subșirul coloanei „Nume_tutorial” ca și coloană „SUB”. Poziția inițială este 1, iar lungimea este 2, deci sunt returnate primele două caractere:

Grilă de rezultate care returnează primele două caractere din Tutorial_name ca și coloană SUB

Întrebarea 2: SUBSTRING() în SQL Server cu o lungime mai mare decât lungimea maximă totală a expresiei.

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

Rezultat: Diagrama de mai jos afișează subșirul coloanei „Nume_tutorial” ca fiind coloana „SUB”. Chiar dacă lungimea subșirului este mai mare decât lungimea maximă totală a expresiei, nu se generează nicio eroare, iar interogarea returnează șirul complet de la poziția inițială încolo:

Grilă de rezultate care returnează restul din Tutorial_name atunci când lungimea solicitată depășește șirul de caractere

SUBSTRING cu CHARINDEX în SQL Server

O utilizare foarte comună în lumea reală a funcției SUBSTRING() este de a exprimatractext care se află înainte sau după un delimitator, cum ar fi domeniul dintr-o adresă de e-mail. Funcția SUBSTRING() necesită o poziție inițială fixă, dar poziția unui delimitator variază de la un rând la altul. Funcția CHARINDEX() rezolvă acest lucru prin returnarea poziției unui caracter în interiorul unui șir de caractere:

CHARINDEX(substring_to_find, expression [, start_location])

Prin imbricarea CHARINDEX() în interiorul SUBSTRING(), poziția inițială devine dinamică. Exemplul de mai jos găsește @ simbol și returnează tot ce este după acesta. A variabil deține valoarea eșantionului:

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

Aici, CHARINDEX('@', @Email) localizează poziția simbolului @, adăugând 1 se mută după acesta, iar SUBSTRING() apoi extraccaracterele rămase. Pentru valoarea de mai sus, interogarea returnează domeniul guru99.comAcest model CHARINDEX-plus-SUBSTRING este metoda standard de a analiza șiruri structurate în T-SQL.

SUBSTRING vs. STÂNGĂ și DREAPTĂ în SQL Server

SQL Server oferă și funcțiile LEFT() și RIGHT() pentru a extrage caractere de la începutul sau sfârșitul unui șir de caractere. Acestea sunt mai scurte de scris, dar sunt limitate la cele două capete. SUBSTRING() este cea mai flexibilă, deoarece poate începe în orice poziție. Tabelul de mai jos le compară:

Funcţie Argumente Extracde la SUBSTRING() echivalent
STÂNGĂ(expresie, n) 2 Începutul șirului SUBSTRING(expresie, 1, n)
DREAPTA(expresie, n) 2 Sfârșitul șirului SUBSTRING(expresie, LEN(expresie) – n + 1, n)
SUBSTRING(expresie, început, lungime) 3 Orice poziție Nu se aplică

Pe scurt, LEFT() și RIGHT() sunt scurtături convenabile pentru capetele unui șir de caractere, în timp ce SUBSTRING() gestionează cazul general, inclusiv caracterele preluate din mijloc.

Argumente negative, zero și NULL în SUBSTRING

Dincolo de regulile de bază, este util să știm cum se comportă SUBSTRING() la margini. Când poziția inițială este zero sau negativă, SQL Server calculează o lungime efectivă de (start + length – 1) și începe să citească de la poziția unu. Când orice argument este NULL, rezultatul este NULL. Tabelul de mai jos, verificat în raport cu regulile oficiale SUBSTRING (Transact-SQL) referință, prezintă aceste cazuri:

Apel Rezultat Motiv
SUBȘIR('Guru99', 1, 4) Guru Apel normal: patru caractere de la poziția unu.
SUBȘIR('Guru99', 0, 3) Gu Începeți sub unu: lungimea efectivă este 0 + 3 – 1 = 2.
SUBȘIR('Guru99', 4, 100) u99 Lungimea dincolo de șir returnează restul, fără eroare.
SUBȘIR('Guru99', 3, NUL) NULL Un argument NULL face ca întregul rezultat să fie NULL.

Cunoașterea acestor cazuri limită previne surprizele atunci când poziția inițială este calculată dintr-o altă coloană sau dintr-o variabil care poate fi zero sau NULL.

Întrebări frecvente

SQL Server utilizează SUBSTRING(); SUBSTR() este numele utilizat în Oracle și MySQLAmbele returnează o porțiune a unui șir de caractere, dar SUBSTRING() este funcția Transact-SQL standard, deci SUBSTR() nu va rula pe SQL Server.

Da. Deoarece SUBSTRING() returnează o valoare, aceasta poate apărea în clauzele WHERE, SELECT și ORDER BY. Filtrarea după SUBSTRING() previne de obicei o căutare de index, așadar un model LIKE este adesea mai rapid pentru căutările de prefixe.

Da, dar SQL Server convertește mai întâi valoarea într-un șir de caractere, fie implicit, fie prin CAST sau CONVERT. Poziția inițială și lungimea numără apoi caractere, nu cifre sau părți ale datei, așadar formatați valoarea cu atenție.

Forma cu trei argumente se comportă similar, dar detaliile diferă. MySQL permite, de asemenea, SUBSTR() și poziții de început negative, în timp ce SQL Server utilizează SUBSTRING() și tratează un început sub unu folosind o regulă de lungime efectivă.

SUBSTRING() returnează aceeași categorie ca și intrarea sa: varchar pentru date de caractere, nvarchar pentru text Unicode și varbinary pentru expresii binare. Lungimea depinde de subșirul solicitat, nu de întreaga coloană sursă.

Wrapping O coloană în SUBSTRING() în interiorul unei clauze WHERE face ca predicatul să nu poată fi clasificat prin sarga, deci SQL Server nu poate utiliza o căutare de index pe acea coloană. Pentru potrivirile de prefixe, un model LIKE 'value%' are de obicei performanțe mai bune.

Da. Copilotul GitHub poate redacta expresii SUBSTRING() și CHARINDEX(), inclusiv parsarea bazată pe delimitatori, dintr-un prompt în limbaj natural. Verificați întotdeauna poziția inițială, lungimea și indexarea bazată pe 1 înainte de a rula interogarea.

Asistenții inteligenți artificiali și de învățare automată traduc regulile din limba engleză simplă în combinații SUBSTRING(), CHARINDEX(), LEFT() și RIGHT(), sugerează calcule de lungime și semnalează erorile cu o valoare de unu. Dezvoltatorul verifică corectitudinea fiecărei sugestii înainte de a o implementa.

Rezumați această postare cu: