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.
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:
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:
Î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:
Î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:
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.





