Substring() SQL Serverissä: Käyttö esimerkin avulla

⚡ Älykäs yhteenveto

SUBSTRING() SQL Serverissä esim.tracts osaa merkistä, tekstistä tai binäärilausekkeesta, palauttaa asetetun määrän merkkejä valitusta aloituskohdasta ja toimii luonnollisesti pareina CHARINDEX:n kanssa erotinmerkkipohjaista jäsennystä varten.

  • ✂️ Tarkoitus: SUBSTRING() palauttaa tietyn osan merkkijonosta annettujen lähdelausekkeiden, aloituskohtien ja pituuksien perusteella.
  • 🔢 Kolme argumenttia: Lauseke, aloituskohta ja kokonaispituus ovat kaikki pakollisia SQL Serverin SUBSTRING()-funktiossa.
  • 📍 Yhteen perustuva indeksi: Lähtökohta on ykkönen, joten ensimmäinen merkki lasketaan ykköseksi, mikä välttää yhden virheen.
  • 🔎 CHARINDEXin kanssa: SUBSTRING():n ja CHARINDEX():n yhdistäminen paikantaa erotinmerkin ja esimerkintracts tekstiä ennen sitä tai sen jälkeen.
  • ↔️ VASEN ja OIKEA vastaan: Toisin kuin LEFT() ja RIGHT(), SUBSTRING( esim.tracts-merkkejä mistä tahansa kohdasta, ei vain päistä.
  • ⚠️ Ääritapaukset: NULL-pituus palauttaa NULL-arvon, kun taas merkkijonon jälkeinen pituus palauttaa jakojäännösten aiheuttamatta virhettä.

SUBSTRING()-funktio SQL Serverissä T-SQL-esimerkeillä

Mikä on Substring()?

SUBSTRING() on funktio kohdassa SQL jonka avulla käyttäjä voi johtaa alimerkkijonon mistä tahansa annetusta merkkijonosta tarpeen mukaan. SUBSTRING() esim.tracpalauttaa tietyn pituisen merkkijonon, joka alkaa tietystä kohdasta syötemerkkijonossa. SUBSTRING()-funktion tarkoitus SQL:ssä on palauttaa tietty osa merkkijonosta.

Alimerkkijono() syntaksi

SUBSTRING(Expression, Starting Position, Total Length)

Tässä:

  • SUBSTRING()-lauseke funktiossa SQL Server voi olla mikä tahansa merkki, binääriluku, teksti tai kuva. Lauseke on lähdemerkkijono, josta alimerkkijono noudetaan.
  • Aloituskohta määrittää lausekkeen kohdan, josta uuden alimerkkijonon tulisi alkaa.
  • Kokonaispituus on lausekkeesta saatavan alimerkkijonon odotettu kokonaispituus aloituskohdasta alkaen.

Säännöt SUBSTRING()

  • Kaikki kolme argumenttia ovat pakollisia MS SQL SUBSTRING() -funktiossa.
  • Jos Aloituskohta on suurempi kuin lausekkeen merkkien enimmäismäärä, SQL Serverin SUBSTRING()-funktio ei palauta mitään.
  • Kokonaispituus voi ylittää alkuperäisen merkkijonon enimmäismerkkipituuden. Tässä tapauksessa tuloksena oleva alimerkkijono on koko merkkijono lausekkeen aloituskohdasta lausekkeen viimeiseen merkkiin asti.

Alla oleva kaavio havainnollistaa SUBSTRING()-funktion käyttöä SQL Serverissä:

Kaavio, joka näyttää, miten SUBSTRING() esim.tracts-merkkejä lähtökohdasta tietyn pituiseksi

Esimerkkejä T-SQL-alimerkkijonoista

Oletus: Oletetaan, että meillä on taulukko nimeltä 'Guru99' kahdella sarakkeella ja neljällä rivillä, kuten alla on esitetty. Käytämme tätä 'Guru99' pöytä seuraavissa esimerkeissä:

Guru99 esimerkkitaulukkoa, jossa on SUBSTRING-esimerkeissä käytetyt Tutorial_ID- ja Tutorial_name-sarakkeet

Kysely 1: SUBSTRING() SQL:ssä, jonka pituus on pienempi kuin lausekkeen kokonaispituus.

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

Tulos: Alla oleva kaavio näyttää 'Tutorial_name'-sarakkeen alimerkkijonon 'SUB'-sarakkeena. Lähtökohta on 1 ja pituus on 2, joten kaksi ensimmäistä merkkiä palautetaan:

Tulosruudukko, joka palauttaa Tutorial_name-sarakkeen kaksi ensimmäistä merkkiä SUB-sarakkeena

Kysely 2: SUBSTRING() SQL Serverissä, jonka pituus on suurempi kuin lausekkeen kokonaispituus.

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

Tulos: Alla oleva kaavio näyttää 'Tutorial_name'-sarakkeen alimerkkijonon 'SUB'-sarakkeena. Vaikka alimerkkijonon pituus on suurempi kuin lausekkeen kokonaispituus, virhettä ei synny ja kysely palauttaa koko merkkijonon lähtökohdasta eteenpäin:

Tulosruudukko palauttaa loput Tutorial_name-kohdasta, kun pyydetty pituus ylittää merkkijonon

SQL Serverin ALIMÄRJÄ ja CHARINDEX

Hyvin yleinen SUBSTRING()-funktion käyttö reaalimaailmassa on ilmaistatracTeksti, joka sijaitsee ennen tai jälkeen erotinmerkin, kuten sähköpostiosoitteen verkkotunnus. Itsessään SUBSTRING() tarvitsee kiinteän aloituskohdan, mutta erottimen sijainti vaihtelee riviltä toiselle. CHARINDEX()-funktio ratkaisee tämän palauttamalla merkin sijainnin merkkijonossa:

CHARINDEX(substring_to_find, expression [, start_location])

Sijoittamalla CHARINDEX()-funktion SUBSTRING()-funktion sisään, aloituskohdasta tulee dynaaminen. Alla oleva esimerkki löytää @ symboli ja palauttaa kaiken sen jälkeisen. A muuttuja sisältää otosarvon:

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

Tässä CHARINDEX('@', @Email) paikantaa @-symbolin sijainnin, lisäämällä 1 siirretään sen ohi, ja SUBSTRING() sitten extracts loput merkit. Yllä olevalla arvolla kysely palauttaa verkkotunnuksen guru99.comTämä CHARINDEX-plus-SUBSTRING-kuvio on T-SQL:n vakiotapa jäsentää strukturoituja merkkijonoja.

SUBSTRING vs. LEFT ja RIGHT SQL Serverissä

SQL Server tarjoaa myös LEFT()- ja RIGHT()-funktiot merkkijonon alusta tai lopusta merkkeihin. Ne ovat lyhyempiä kirjoittaa, mutta ne rajoittuvat kahteen päähän. SUBSTRING() on joustavin, koska se voi alkaa mistä tahansa kohdasta. Alla oleva taulukko vertailee niitä:

Toiminto argumentit Extracts alkaen Vastaava ALIMERKO()
VASEN(lauseke, n) 2 Merkkijonon alku SUBSTRING(lauseke, 1, n)
OIKEA(lauseke, n) 2 Merkkijonon loppu SUBSTRING(lauseke, LEN(lauseke) – n + 1, n)
SUBSTRING(lauseke, alku, pituus) 3 Mikä tahansa asema Ei sovellettavissa

Lyhyesti sanottuna LEFT() ja RIGHT() ovat käteviä oikopolkuja merkkijonon päille, kun taas SUBSTRING() käsittelee yleisen tapauksen, mukaan lukien keskeltä otetut merkit.

Negatiiviset, nolla- ja NULL-argumentit SUBSTRING-lausekkeessa

Perussääntöjen lisäksi on hyödyllistä tietää, miten SUBSTRING() käyttäytyy reunoilla. Kun aloituskohta on nolla tai negatiivinen, SQL Server laskee efektiivisen pituuden (alku + pituus – 1) ja aloittaa lukemisen kohdasta yksi. Kun mikä tahansa argumentti on NULL, tulos on NULL. Alla oleva taulukko, tarkistettuna virallista ALIMERKINTÄ (Transact-SQL) viite, näyttää nämä tapaukset:

Puhelu Tulos Syy
SUBSTRING('Guru99', 1, 4) Guru Normaali kutsu: neljä merkkiä kohdasta yksi.
SUBSTRING('Guru99', 0, 3) Gu Aloita yhden alapuolelta: efektiivinen pituus on 0 + 3 – 1 = 2.
SUBSTRING('Guru99', 4, 100) u99 Merkkijonon jälkeinen pituus palauttaa jakojäännösarvon ilman virhettä.
SUBSTRING('Guru99', 3, TYHJÄ) NULL NULL-argumentti tekee koko tuloksesta NULLin.

Näiden reunatapausten tunteminen estää yllätyksiä, kun lähtökohta lasketaan toisesta sarakkeesta tai muuttuja joka voi olla nolla tai NULL.

UKK

SQL Server käyttää SUBSTRING()-funktiota; SUBSTR() on nimi, jota käytetään Oracle ja MySQLMolemmat palauttavat osan merkkijonosta, mutta SUBSTRING() on Transact-SQL:n vakiofunktio, joten SUBSTR() ei toimi SQL Serverissä.

Kyllä. Koska SUBSTRING() palauttaa arvon, se voi esiintyä WHERE-, SELECT- ja ORDER BY -lausekkeissa. SUBSTRING()-funktion suodattaminen estää yleensä indeksin haun, joten LIKE-malli on usein nopeampi etuliitehauissa.

Kyllä, mutta SQL Server muuntaa arvon ensin merkkijonoksi joko implisiittisesti tai CAST- tai CONVERT-operaattorin avulla. Alkukohta ja pituus lasketaan sitten merkeinä, eivät numeroina tai päivämääräosina, joten muotoile arvo huolellisesti.

Kolmiargumenttinen muoto toimii samalla tavalla, mutta yksityiskohdat eroavat toisistaan. MySQL sallii myös SUBSTR()-funktion ja negatiiviset aloituskohdat, kun taas SQL Server käyttää SUBSTRING()-funktiota ja käsittelee yhden alapuolella olevaa aloituskohtaa efektiivisen pituuden säännön avulla.

SUBSTRING() palauttaa saman luokan kuin syötteensä: varchar merkkitiedoille, nvarchar Unicode-teksteille ja varbinary binäärilausekkeille. Pituus riippuu pyydetystä alimerkkijonosta, ei koko lähdesarakkeesta.

Kääriping Jos SUBSTRING()-funktiossa on sarake WHERE-lauseen sisällä, predikaatti ei ole tallennettava, joten SQL Server ei voi käyttää indeksin hakua kyseiseen sarakkeeseen. Etuliiteosumien osalta LIKE 'value%' -malli toimii yleensä paremmin.

Kyllä. GitHub Copilot voi luonnostella SUBSTRING()- ja CHARINDEX()-lausekkeita, mukaan lukien erottimiin perustuvan jäsentämisen, luonnollisen kielen kehotteesta. Tarkista aina aloituskohta, pituus ja 1-pohjainen indeksointi ennen kyselyn suorittamista.

Tekoäly ja koneoppimisavustajat kääntävät selkokieliset säännöt SUBSTRING()-, CHARINDEX()-, LEFT()- ja RIGHT()-yhdistelmiksi, ehdottavat pituuslaskelmia ja merkitsevät yksittäisiä virheitä. Kehittäjä tarkistaa jokaisen ehdotuksen oikeellisuuden ennen sen käyttöönottoa.

Tiivistä tämä viesti seuraavasti: