Substring() u SQL Serveru: Kako koristiti s primjerom

⚡ Pametni sažetak

SUBSTRING() u SQL Serveru npr.tracts vraća dio znaka, teksta ili binarnog izraza, vraćajući zadani broj znakova s ​​odabrane početne pozicije i prirodno se uparuje s CHARINDEX-om za parsiranje na temelju razdjelnika.

  • ✂️ Svrha: SUBSTRING() vraća određeni dio niza, na temelju izvornog izraza, početne pozicije i duljine.
  • 🔢 Tri argumenta: Izraz, početna pozicija i ukupna duljina su obavezni u funkciji SQL Server SUBSTRING().
  • ???? Jednobazirani indeks: Početna pozicija je bazirana na 1, tako da se prvi znak računa kao pozicija jedan, što izbjegava pogreške odstupanja za jedan.
  • 🔎 S CHARINDEXOM: Spajanje SUBSTRING() s CHARINDEX() pronalazi razdjelnik i extracts tekst prije ili poslije njega.
  • ↔️ Nasuprot LIJEVOM i DESNOM: Za razliku od LEFT() i RIGHT(), SUBSTRING() npr.tracts znakove s bilo koje pozicije, ne samo s krajeva.
  • ⚠️ Rubni slučajevi: Duljina NULL vraća NULL, dok duljina izvan niza vraća ostatak bez izazivanja greške.

Funkcija SUBSTRING() u SQL Serveru s T-SQL primjerima

Što je Substring()?

SUBSTRING() je funkcija u SQL što korisniku omogućuje izvođenje podniza iz bilo kojeg zadanog niza prema potrebi. SUBSTRING() npr.tracts niz određene duljine, počevši od zadane lokacije u ulaznom nizu. Svrha SUBSTRING() u SQL-u je vratiti određeni dio niza.

Sintaksa za Substring()

SUBSTRING(Expression, Starting Position, Total Length)

Ovdje:

  • Izraz SUBSTRING() u SQL Server može biti bilo koji znak, binarni podatak, tekst ili slika. Izraz je izvorni niz iz kojeg se dohvaća podniz.
  • Početna pozicija određuje poziciju u izrazu od koje bi trebao započeti novi podniz.
  • Ukupna duljina je ukupna očekivana duljina rezultirajućeg podniza iz izraza, počevši od početne pozicije.

Pravila za korištenje SUBSTRING()

  • Sva tri argumenta su obavezna u funkciji MS SQL SUBSTRING().
  • Ako je početna pozicija veća od maksimalnog broja znakova u izrazu, funkcija SUBSTRING() u SQL Serveru ne vraća ništa.
  • Ukupna duljina može premašiti maksimalnu duljinu znakova izvornog niza. U ovom slučaju, rezultirajući podniz je cijeli niz, počevši od početne pozicije u izrazu do posljednjeg znaka izraza.

Donji dijagram ilustrira korištenje funkcije SUBSTRING() u SQL Serveru:

Dijagram koji prikazuje kako SUBSTRING() extracts znakova s ​​početne pozicije za zadanu duljinu

Primjeri T-SQL podnizova

Pretpostavka: Pretpostavimo da imamo tablicu pod nazivom 'Guru99' s dva stupca i četiri retka, kao što je prikazano dolje. Koristit ćemo ovo'Guru99' tablica u sljedećim primjerima:

Guru99 primjer tablice sa stupcima Tutorial_ID i Tutorial_name korištenim u primjerima SUBSTRING

Upit 1: SUBSTRING() u SQL-u s duljinom manjom od ukupne maksimalne duljine izraza.

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

Rezultat: Dijagram u nastavku prikazuje podniz stupca 'Tutorial_name' kao stupac 'SUB'. Početna pozicija je 1, a duljina je 2, pa se vraćaju prva dva znaka:

Mreža rezultata vraća prva dva znaka naziva_tutoriala kao SUB stupac

Upit 2: SUBSTRING() u SQL Serveru s duljinom većom od ukupne maksimalne duljine izraza.

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

Rezultat: Donji dijagram prikazuje podniz stupca 'Tutorial_name' kao stupac 'SUB'. Iako je duljina podniza veća od ukupne maksimalne duljine izraza, ne javlja se pogreška i upit vraća cijeli niz od početne pozicije nadalje:

Mreža rezultata vraća ostatak od Tutorial_name kada tražena duljina premašuje niz

SUBSTRING s CHARINDEX u SQL Serveru

Vrlo uobičajena upotreba SUBSTRING() u stvarnom svijetu je za extractekst koji se nalazi prije ili poslije razdjelnika, kao što je domena u adresi e-pošte. Sama po sebi, SUBSTRING() treba fiksni početni položaj, ali položaj razdjelnika varira od retka do retka. Funkcija CHARINDEX() rješava to vraćanjem položaja znaka unutar niza:

CHARINDEX(substring_to_find, expression [, start_location])

Ugniježđivanjem CHARINDEX() unutar SUBSTRING(), početna pozicija postaje dinamična. Primjer u nastavku pronalazi @ simbol i vraća sve nakon njega. A varijabla sadrži vrijednost uzorka:

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

Ovdje, CHARINDEX('@', @Email) locira poziciju simbola @, dodavanjem 1 pomiče se dalje od njega, a SUBSTRING() zatim extracts preostale znakove. Za gornju vrijednost, upit vraća domenu guru99.comOvaj obrazac CHARINDEX-plus-SUBSTRING je standardni način parsiranja strukturiranih nizova u T-SQL-u.

SUBSTRING u odnosu na LEFT i RIGHT u SQL Serveru

SQL Server također nudi funkcije LEFT() i RIGHT() za izvlačenje znakova s ​​početka ili kraja niza. Kraće ih je napisati, ali su ograničene na dva kraja. SUBSTRING() je najfleksibilnija jer može započeti na bilo kojoj poziciji. Tablica u nastavku ih uspoređuje:

funkcija argumenti Extracts od Ekvivalent SUBSTRING()
LEFT(izraz, n) 2 Početak niza SUBSTRING(izraz, 1, n)
DESNO(izraz, n) 2 Kraj niza SUBSTRING(izraz, LEN(izraz) – n + 1, n)
SUBSTRING(izraz, početak, duljina) 3 Bilo koja pozicija Nije primjenjivo

Ukratko, LEFT() i RIGHT() su praktične prečice za krajeve niza, dok SUBSTRING() obrađuje opća pravila, uključujući znakove preuzete iz sredine.

Negativni, nulti i NULL argumenti u SUBSTRING-u

Osim osnovnih pravila, korisno je znati kako se SUBSTRING() ponaša na rubovima. Kada je početna pozicija nula ili negativna, SQL Server izračunava efektivnu duljinu od (početak + duljina – 1) i počinje čitati od pozicije jedan. Kada je bilo koji argument NULL, rezultat je NULL. Tablica u nastavku, provjerena u odnosu na službene SUBSTRING (Transact-SQL) referenca, prikazuje ove slučajeve:

poziv Proizlaziti Razlog
SUBSTRING('Guru99', 1, 4) Guru Normalni poziv: četiri znaka od pozicije jedan.
SUBSTRING('Guru99', 0, 3) Gu Počnite ispod jedan: efektivna duljina je 0 + 3 – 1 = 2.
SUBSTRING('Guru99', 4, 100) u99 Duljina izvan niza vraća ostatak, bez greške.
SUBSTRING('Guru99', 3, NULA) NULL NULL argument čini cijeli rezultat NULL.

Poznavanje ovih rubnih slučajeva sprječava iznenađenja kada se početna pozicija izračunava iz drugog stupca ili varijabla to može biti nula ili NULL.

Pitanja i odgovori

SQL Server koristi SUBSTRING(); SUBSTR() je naziv koji se koristi u Oracle i MySQLObje vraćaju dio niza znakova, ali SUBSTRING() je standardna Transact-SQL funkcija, pa se SUBSTR() neće izvoditi na SQL Serveru.

Da. Budući da SUBSTRING() vraća vrijednost, ona se može pojaviti u klauzulama WHERE, SELECT i ORDER BY. Filtriranje na SUBSTRING() obično sprječava pretraživanje indeksa, pa je LIKE uzorak često brži za pretraživanja prefiksa.

Da, ali SQL Server prvo pretvara vrijednost u niz znakova, implicitno ili putem CAST ili CONVERT. Početna pozicija i duljina zatim broje znakove, a ne znamenke ili dijelove datuma, stoga pažljivo formatirajte vrijednost.

Oblik s tri argumenta ponaša se slično, ali se detalji razlikuju. MySQL također dopušta SUBSTR() i negativne početne pozicije, dok SQL Server koristi SUBSTRING() i tretira početak ispod jedan koristeći pravilo efektivne duljine.

SUBSTRING() vraća istu kategoriju kao i njegov ulaz: varchar za znakovne podatke, nvarchar za Unicode tekst i varbinary za binarne izraze. Duljina ovisi o traženom podnizu, a ne o cijelom izvornom stupcu.

Zamotajteping Stupac u SUBSTRING() unutar WHERE klauzule čini predikat nerazlučivim, pa SQL Server ne može koristiti indeksno pretraživanje na tom stupcu. Za podudaranja prefiksa, uzorak LIKE 'value%' obično daje bolje rezultate.

Da. GitHub kopilot može izraditi izraze SUBSTRING() i CHARINDEX(), uključujući parsiranje na temelju razdjelnika, iz upita na prirodnom jeziku. Uvijek provjerite početnu poziciju, duljinu i indeksiranje na temelju 1 prije pokretanja upita.

Umjetna inteligencija i pomoćnici za strojno učenje prevode pravila na običnom engleskom jeziku u kombinacije SUBSTRING(), CHARINDEX(), LEFT() i RIGHT(), predlažu izračune duljine i označavaju pogreške s razlikom za jedan. Programer pregledava svaki prijedlog radi ispravnosti prije implementacije.

Sažmite ovu objavu uz: