15/17.10. Funkcije za rad sa stringovima (koristimo MS SQL Server 2008)
U SQL-u, string (niz karaktera) je podatak tipa:
CHAR ( n )– tekst fiksne dužine,VARCHAR ( n )– tekst promenljive dužine,NCHAR/NVARCHAR– za tekst koji koristi Unicode znakove (ćirilica, specijalni simboli) - ovaj tip koristi samo MS SQL Server.- (
TEXT– duži tekst - zastarelo za MS SQL Server, aktivno se koristi u MySQL-u)
Stringovi se uvek pišu pod navodnicima ('tekst').
Primer:
SELECT 'Ovo je tekstualna vrednost' AS Primer;
Najčešće funkcije za rad sa stringovima
SQL nudi mnogo funkcija za rad sa tekstom.
Ovde su najvažnije i najčešće korišćene.
1️⃣ LEN() — dužina stringa
Vraća broj karaktera u tekstu (bez praznina na kraju).
SELECT LEN('SQL Server') AS BrojKaraktera;
Rezultat: 10
Ako tekst ima razmake na kraju, LEN ih ne broji.
Postoji i funkcija DATALENGTH() koja broji i razmake (i bajtove).
2️⃣ LOWER() i UPPER() — mala / velika slova
SELECT
LOWER('PROGRAMIRANJE') AS MalaSlova,
UPPER('baze podataka') AS VelikaSlova;
Rezultat:
| MalaSlova | VelikaSlova |
|---|---|
| programiranje | BAZE PODATAKA |
3️⃣ LTRIM() i RTRIM() — uklanjanje praznina
Uklanjaju razmake s leve (LTRIM) i desne (RTRIM) strane stringa.
SELECT
LTRIM(' SQL') AS BezLevihRazmaka,
RTRIM('SQL ') AS BezDesnihRazmaka;
Rezultat:
| BezLevihRazmaka | BezDesnihRazmaka |
|---|---|
| SQL | SQL |
4️⃣ SUBSTRING() — izdvajanje dela stringa
Omogućava da uzmemo deo teksta (određeni broj karaktera).
Sintaksa:
SUBSTRING(tekst, početna_pozicija, dužina)
Primer:
SELECT SUBSTRING('PROGRAMIRANJE', 1, 7) AS Deo;
Rezultat: PROGRAM
5️⃣ LEFT() i RIGHT() — izdvajanje karaktera s početka ili kraja stringa
SELECT
LEFT('SQL Server', 3) AS PrvaTri,
RIGHT('SQL Server', 6) AS ZadnjihSest;
Rezultat:
| PrvaTri | ZadnjihSest |
|---|---|
| SQL | Server |
6️⃣ REPLACE() — zamena podstringa
Menja jedan deo teksta drugim.
SELECT REPLACE('Učimo SQL', 'SQL', 'C#') AS NoviTekst;
Rezultat: Učimo C#
7️⃣ CHARINDEX() — pozicija podstringa u tekstu
Vraća poziciju gde se određeni tekst prvi put pojavljuje.
SELECT CHARINDEX('L', 'SQL LANGUAGE') AS Pozicija;
Rezultat: 3
Ako tekst ne postoji – rezultat je 0.
8️⃣ REVERSE() — obrće redosled karaktera
SELECT REVERSE('SQL') AS Obrnuto;
Rezultat: LQS
Primeri:
Kreirati tabelu i uneti neke podatke:
CREATE TABLE Ucenici (
ID INT IDENTITY(1,1),
Ime NVARCHAR(20),
Prezime NVARCHAR(20)
);
INSERT INTO Ucenici (Ime, Prezime) VALUES
('Milan', 'Petrovic'),
('Ana', 'Nikolic'),
('Jovana', 'Maric');
Primer 1 — izdvajanje prvog slova prezimena
SELECT Ime, LEFT(Prezime, 1) + '.' AS Inicijal
FROM Ucenici;
Primer 2 — pretvaranje u velika slova
SELECT UPPER(Ime + ' ' + Prezime) AS VelikaSlova
FROM Ucenici;
Zadaci za samostalan rad (diferencirani)
🔹 Lakši zadaci (za učenike koji se slabije snalaze)
-
Prikazati dužinu stringa
'Baza podataka'. -
Napisati upit koji pretvara
'sql server'u velika slova. -
Ukloniti razmake sa leve strane stringa
' primer'.
🔸 Srednji nivo
-
Prikazati prva tri slova prezimena svakog učenika.
-
Iskombinovati ime i prezime u jednu kolonu razdvojenu razmakom.
-
Zameniti sva slova
au imenu sa@.
🔹 Napredni nivo
-
Prikazati prezimena učenika obrnuto napisano (
REVERSE). -
Prikazati samo učenike kod kojih ime sadrži slovo
o(koristitiCHARINDEX). -
Kao rezultat upita treba napraviti novu kolonu
Opisu kojoj piše:"Učenik Ime Prezime ima dužinu imena X karaktera"
(koristitiCONCATiLEN).
Rešenja zadataka
Lakši
SELECT LEN('Baza podataka') AS Dužina;
SELECT UPPER('sql server') AS Velika;
SELECT LTRIM(' primer') AS Rezultat;
Srednji
SELECT LEFT(Prezime,3) AS TriSlova FROM Ucenici;
SELECT CONCAT(Ime,' ',Prezime) AS PunoIme FROM Ucenici;
SELECT REPLACE(Ime,'a','@') AS NoviTekst FROM Ucenici;
Napredni
SELECT REVERSE(Prezime) AS Obrnuto FROM Ucenici;
SELECT Ime, Prezime
FROM Ucenici
WHERE CHARINDEX('o', Ime) > 0;
SELECT
CONCAT('Učenik ', Ime, ' ', Prezime,
' ima dužinu imena ',
LEN(Ime), ' karaktera.') AS Opis
FROM Ucenici;
Dodatna literatura:
..