Substring() SQL Serveris: kuidas kasutada koos näitega

⚡ Nutikas kokkuvõte

SUBSTRING() SQL Serveris, näitekstracTagastab märgi, teksti või binaaravaldise osa, tagastades valitud alguspunktist määratud arvu märke ja paaristub loomulikult funktsiooniga CHARINDEX eraldajapõhiseks parsimiseks.

  • ✂️ Eesmärk: SUBSTRING() tagastab stringi kindla osa, arvestades lähteteksti avaldist, alguspositsiooni ja pikkust.
  • 🔢 Kolm argumenti: Avaldis, alguspositsioon ja kogupikkus on SQL Serveri SUBSTRING() funktsioonis kohustuslikud.
  • 📍 Ühepõhine indeks: Alguspositsioon põhineb 1-l, seega loetakse esimene märk esimeseks tähemärgiks, mis väldib ühekaupa valesid märke.
  • 🔎 CHARINDEXiga: SUBSTRING() ja CHARINDEX() sidumine leiab eraldaja ja extracts teksti enne või pärast seda.
  • ↔️ Vasakule ja paremale: Erinevalt LEFT()-st ja RIGHT()-st on SUBSTRING( nttracts tegelased igast positsioonist, mitte ainult otstest.
  • ⚠️ Äärmuslikud juhtumid: NULL-pikkus tagastab NULL-i, samas kui stringist kaugemal olev pikkus tagastab jäägi ilma viga tekitamata.

SUBSTRING() funktsioon SQL Serveris koos T-SQL näidetega

Mis on alamstring()?

SUBSTRING() on funktsioon, mis asub SQL mis võimaldab kasutajal vastavalt vajadusele mis tahes stringist alamstringi tuletada. SUBSTRING() nttracTagastab kindla pikkusega stringi, mis algab sisendstringi kindlast kohast. SUBSTRING() eesmärk SQL-is on tagastada stringi kindel osa.

Alamstringi () süntaks

SUBSTRING(Expression, Starting Position, Total Length)

siin:

  • SUBSTRING() avaldis SQL Server võib olla mis tahes märk, kahendkood, tekst või pilt. Avaldis on lähtetekst, millest alamsõnge hangitakse.
  • Alguspositsioon (Starting Position) määrab avaldises positsiooni, kust uus alamstring peaks algama.
  • Kogupikkus on avaldisest tuleneva alamstringi eeldatav kogupikkus alates alguspositsioonist.

SUBSTRING() kasutamise reeglid

  • Kõik kolm argumenti on MS SQL SUBSTRING() funktsioonis kohustuslikud.
  • Kui algpositsioon on suurem kui avaldise maksimaalne tähemärkide arv, siis SQL Serveri funktsioon SUBSTRING() ei tagasta midagi.
  • Kogupikkus võib ületada algse stringi maksimaalset tähemärkide arvu. Sellisel juhul on tulemuseks olev alamstring kogu string, alates avaldise alguspositsioonist kuni avaldise viimase tähemärgini.

Allolev diagramm illustreerib SUBSTRING() funktsiooni kasutamist SQL Serveris:

Diagramm, mis näitab, kuidas SUBSTRING() nttracts tähemärke alguspositsioonist antud pikkuse jooksul

T-SQL-i alamstringi näited

Eeldus: Oletame, et meil on tabel nimega 'Guru99' kahe veeru ja nelja reaga, nagu allpool näidatud. Me kasutame seda 'Guru99' laud järgmistes näidetes:

Guru99 näidistabel veergudega Tutorial_ID ja Tutorial_name, mida kasutati SUBSTRING näidetes

Päring 1: SUBSTRING() SQL-is, mille pikkus on väiksem kui avaldise maksimaalne kogupikkus.

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

Tulemus: Allolev diagramm kuvab veeru 'Tutorial_name' alamstringi veeruna 'SUB'. Alguspositsioon on 1 ja pikkus on 2, seega tagastatakse kaks esimest märki:

Tulemuste tabel, mis tagastab õppematerjali_nime kaks esimest tähemärki SUB-veeruna

Päring 2: SUBSTRING() SQL Serveris, mille pikkus on suurem kui avaldise maksimaalne kogupikkus.

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

Tulemus: Allolev diagramm kuvab veeru 'Tutorial_name' alamstringi veeruna 'SUB'. Isegi kui alamstringi pikkus on suurem kui avaldise maksimaalne kogupikkus, ei teki viga ja päring tagastab kogu stringi alates alguspunktist:

Tulemuste tabel, mis tagastab ülejäänud osa tekstist Tutorial_name, kui taotletud pikkus ületab stringi.

SQL Serveris on alamstring koos CHARINDEX-iga

SUBSTRING() funktsiooni väga levinud kasutusala reaalses maailmas on extracTekst, mis asub eraldaja ees või järel, näiteks domeen e-posti aadressis. Funktsioon SUBSTRING() vajab iseenesest fikseeritud alguspositsiooni, kuid eraldaja asukoht varieerub reati. Funktsioon CHARINDEX() lahendab selle, tagastades märgi asukoha stringis:

CHARINDEX(substring_to_find, expression [, start_location])

CHARINDEX() funktsiooni SUBSTRING() funktsiooni sisse pesastades muutub alguspunkt dünaamiliseks. Allolev näide leiab @ sümbol ja tagastab kõik pärast seda. A muutuja hoiab valimi väärtust:

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

Siin leiab CHARINDEX('@', @Email) @-sümboli asukoha, 1 lisamine liigutab selle taha ja SUBSTRING() seejärel extracülejäänud tähemärgid. Ülaltoodud väärtuse korral tagastab päring domeeni guru99.comSee CHARINDEX-plus-SUBSTRING muster on T-SQL-is struktureeritud stringide parsimise standardviis.

SUBSTRING vs LEFT ja RIGHT SQL Serveris

SQL Server pakub ka funktsioone LEFT() ja RIGHT() märkide ammutamiseks stringi algusest või lõpust. Nende kirjutamine on lühem, kuid nende toimivus piirdub kahe otsaga. SUBSTRING() on kõige paindlikum, kuna see võib alata mis tahes positsioonilt. Allolev tabel võrdleb neid:

funktsioon Argumendid Extracts alates Samaväärne alamstring()
VASAK(avaldis, n) 2 Stringi algus SUBSTRING(avaldis, 1, n)
PAREMALE(avaldis, n) 2 Stringi lõpp SUBSTRING(avaldis; LEN(avaldis) – n + 1; n)
SUBSTRING(avaldis, algus, pikkus) 3 Igasugune positsioon ei ole kohaldatav

Lühidalt, LEFT() ja RIGHT() on mugavad otseteed stringi otste jaoks, samas kui SUBSTRING() käsitleb üldist juhtumit, sealhulgas keskelt võetud märke.

Negatiivsed, null- ja NULL-argumendid alamstringis

Lisaks põhireeglitele on kasulik teada, kuidas SUBSTRING() servades käitub. Kui alguspunkt on null või negatiivne, arvutab SQL Server efektiivse pikkuse (algus + pikkus – 1) ja alustab lugemist esimesest positsioonist. Kui mõni argument on NULL, on tulemuseks NULL. Allolev tabel, mida on ametliku standardi suhtes kontrollitud ALAMSÕNA (Transact-SQL) viide näitab neid juhtumeid:

Helista Tulemus Põhjus
SUBSTRING('Guru99', 1, 4) Guru Tavaline kutse: neli tähemärki alates esimesest positsioonist.
SUBSTRING('Guru99', 0, 3) Gu Alusta ühest allapoole: efektiivne pikkus on 0 + 3 – 1 = 2.
SUBSTRING('Guru99', 4, 100) u99 Length beyond string tagastab jäägi ilma veateateta.
SUBSTRING('Guru99', 3, NULL) NULL NULL argument muudab kogu tulemuse NULL-iks.

Nende äärejuhtumite tundmine hoiab ära üllatused, kui alguspositsioon arvutatakse mõne teise veeru või muu põhjal. muutuja see võib olla null või NULL.

KKK

SQL Server kasutab funktsiooni SUBSTRING(); SUBSTR() on nimi, mida kasutatakse Oracle ja MySQLMõlemad tagastavad osa stringist, kuid SUBSTRING() on standardne Transact-SQL-i funktsioon, seega SUBSTR() ei tööta SQL Serveris.

Jah. Kuna SUBSTRING() tagastab väärtuse, saab see esineda WHERE, SELECT ja ORDER BY klauslites. SUBSTRING() filtreerimine takistab tavaliselt indeksi otsimist, seega on LIKE muster eesliidete otsingute puhul sageli kiirem.

Jah, aga SQL Server teisendab väärtuse esmalt stringiks, kas kaudselt või CAST-i või CONVERT-i abil. Seejärel loendatakse alguspunkt ja pikkus tähemärke, mitte numbreid ega kuupäeva osi, seega vormindage väärtus hoolikalt.

Kolmeargumendiline vorm käitub sarnaselt, kuid üksikasjad erinevad. MySQL lubab ka SUBSTR() ja negatiivseid alguspositsioone, samas kui SQL Server kasutab SUBSTRING() ja käsitleb algust alla ühe efektiivse pikkuse reegli abil.

SUBSTRING() tagastab sama kategooria, mis oli tema sisendil: varchar tähemärkide puhul, nvarchar Unicode-teksti puhul ja varbinary binaaravaldiste puhul. Pikkus sõltub taotletud alamstringist, mitte kogu lähteveerust.

Mähiping Kui SUBSTRING() funktsioonis on veerg WHERE-klauslis, siis predikaadi ei saa edaspidi salvestada, seega ei saa SQL Server sellel veerul indeksiotsingut kasutada. Prefiksi vastete korral toimib LIKE muster 'value%' tavaliselt paremini.

Jah. GitHubi koopia saab loomuliku keele käsurealt luua SUBSTRING() ja CHARINDEX() avaldisi, sh eraldajatel põhinevat parsimist. Enne päringu käivitamist kontrollige alati alguspositsiooni, pikkust ja 1-põhist indekseerimist.

Tehisintellekt ja masinõppe assistendid tõlgivad lihtsad inglise keele reeglid SUBSTRING(), CHARINDEX(), LEFT() ja RIGHT() kombinatsioonideks, pakuvad välja pikkuse arvutusi ja märgistavad ükshaaval tehtud vead. Arendaja kontrollib enne ettepaneku juurutamist iga ettepaneku õigsust.

Võta see postitus kokku järgmiselt: