MySQL SUBSTRING funktsioon: täielik juhend koos näidetega

1. Mis on SUBSTRING funktsioon?

SUBSTRING funktsioon on oluline vahend MySQL-is, mis võimaldab stringist alamosa välja võtta. Selle abil saab andmebaasis olevatest andmetest eraldada ainult vajaliku osa. Näiteks on seda kasulik kasutada, kui soovid e-posti aadressist domeeni välja võtta või tootekoodist kindla osa eraldada.

1.1 Põhisüntaks

SUBSTRING funktsiooni põhisüntaks on järgmine:

SUBSTRING(str, pos)
SUBSTRING(str, pos, len)
  • str: lähte string, millest osa võetakse.
  • pos: alguspositsioon (algab väärtusest 1).
  • len: eraldatavate märkide arv (valikuline).

Kui pos on positiivne väärtus, alustatakse algusest määratud kohani. Negatiivse väärtuse korral loetakse lõpu poolt. Kui len on vahele jäetud, eraldatakse alates määratud positsioonist kuni stringi lõpuni.

1.2 SUBSTRING funktsiooni kasutusalad

Seda funktsiooni kasutatakse stringide vormindamiseks ja kindlate osade eraldamiseks, mis muudab andmebaasis otsingu ja andmetöötluse tõhusamaks.

2. SUBSTRING funktsiooni põhiline kasutamine

Parema arusaamise huvides vaatame mõnda lihtsat näidet.

2.1 Stringi osa eraldamine

Järgmine päring eraldab stringist “Hello, World!” alates 3. positsioonist 6 märki.

SELECT SUBSTRING('Hello, World!', 3, 6);

Tulemus on "llo, W". Kuna pos on 3, alustatakse kolmandast märgist ja len on 6, seega eraldatakse kuus märki.

2.2 Märkide arvu vahelejätmine

Kui len ära jätta, eraldatakse string lõpuni alates määratud positsioonist.

SELECT SUBSTRING('Hello, World!', 8);

Tulemus on "World!", kuna eraldamine algab 8. märgist ja jätkub lõpuni.

2.3 Negatiivse positsiooni kasutamine

Negatiivset väärtust kasutades saab positsiooni määrata stringi lõpust lugedes.

SELECT SUBSTRING('Hello, World!', -5);

See päring tagastab "orld!", mis tähendab, et viimased viis märki eraldatakse.

3. SUBSTRING funktsiooni praktilised rakendused

SUBSTRING funktsiooni kasutatakse sageli reaalses andmetöötluses. Siin on mõned rakendusnäited.

3.1 Domeeni eraldamine e-posti aadressist

Kombineerides SUBSTRING ja LOCATE, saab e-posti aadressist eraldada domeeni osa.

SELECT email, SUBSTRING(email, LOCATE('@', email) + 1) AS domain FROM users;

See päring eraldab stringi alates märgist “@”, jättes alles ainult domeeni.

3.2 Tootekoodi osa eraldamine

Näide, kus tootekoodist eraldatakse kindel osa.

SELECT product_code, SUBSTRING(product_code, 5, 4) AS product_id FROM products;

See päring eraldab tootekoodist alates 5. positsioonist 4 märki ja kuvab selle uue veeruna product_id.

3.3 Kasutamine alampäringus

Kombineerides alampäringutega, saab luua keerukamaid tingimusi andmete eraldamiseks.

SELECT id, SUBSTRING(description, 1, 10) AS short_desc FROM (SELECT * FROM products WHERE category = 'Electronics') AS sub;

See päring tagastab kategoorias ‘Electronics’ olevate toodete description veeru esimesed kümme märki.

4. Võrdlus teiste stringi funktsioonidega

Lisaks SUBSTRING-ile saab sarnase eesmärgi saavutamiseks kasutada ka funktsioone LEFT, RIGHT ja SUBSTR.

4.1 LEFT ja RIGHT funktsioonid

  • LEFT(str, len): võtab stringi algusest määratud arvu märke.
  • RIGHT(str, len): võtab stringi lõpust määratud arvu märke.
SELECT LEFT('Hello, World!', 5);  -- "Hello"
SELECT RIGHT('Hello, World!', 6); -- "World!"

Need funktsioonid on mugavad, kui soovid stringi kindlast asukohast osa eraldada.

4.2 SUBSTR funktsioon

SUBSTR on SUBSTRING alias ja seda saab kasutada samamoodi.

SELECT SUBSTR('Hello, World!', 8); -- "World!"

See päring tagastab sama tulemuse nagu SUBSTRING, ehk "World!".

5. SUBSTRING funktsiooni laiendatud kasutus ja optimeerimine

Siin selgitame edasijõudnud kasutusviise ja optimeerimistehnikaid.

5.1 Jõudluse optimeerimine

Kui kasutada SUBSTRING väga suurte andmemahtude puhul, võib see mõjutada päringute jõudlust. Vajadusel loo indeksid ja kontrolli päringu täitmise plaani. Kui sama osa stringist eraldatakse sageli, kaalu tulemuse vahemällu salvestamist.

5.2 Kasutamine WHERE klauslis

SUBSTRING saab kasutada ka WHERE klauslis tingimusotsinguks osaliste stringide alusel.

SELECT * FROM products WHERE SUBSTRING(product_code, 1, 3) = 'ABC';

See päring tagastab tooted, mille product_code algab väärtusega ‘ABC’.

6. SUBSTRING funktsiooni näited ja parimad tavad

Siin toome välja praktilised näited ja soovitused SUBSTRING funktsiooni kasutamisel.

6.1 Näidiskood

Järgmine näide näitab, kuidas kliendi täisnimest eraldada eesnimi ja perekonnanimi.

SELECT name, SUBSTRING(name, 1, LOCATE(' ', name) - 1) AS first_name,
       SUBSTRING(name, LOCATE(' ', name) + 1) AS last_name
FROM customers;

See päring eraldab tühiku põhjal täisnimest ees- ja perekonnanime.

6.2 Parimad tavad

  • Minimaalne eraldamine: kasuta SUBSTRING-i ainult nii palju kui vaja, et vähendada jõudluse mõju.
  • Andmetüübi jälgimine: kui rakendad SUBSTRING-i arvandmetele, teisenda need esmalt stringiks.
  • Indeksite kasutamine: WHERE klauslis kasutades arvesta, et indeksid ei pruugi alati kehtida, mis võib päringu aeglasemaks muuta.

7. Vigade käsitlemine ja versioonide erinevused

Räägime, kuidas SUBSTRING funktsiooni puhul arvestada vigade käsitlemist ja MySQL versioonide erinevusi.

7.1 Vigade käsitlemine

Kui määratud positsioon jääb stringi piiridest välja, tagastab SUBSTRING tühja stringi. Seda ei käsitleta veana, seega on soovitatav lisada loogika tulemuse eelkontrolliks.

7.2 Versioonide erinevused

MySQL-i versioonide lõikes võib SUBSTRING funktsiooni käitumine erineda. Näiteks mõned vanemad versioonid käsitlevad mitmebaidilisi märke teisiti. Kontrolli kindlasti versioonide ühilduvust ja vajadusel rakenda sobivaid lahendusi.