String funkcije (3. deo)

Objavljeno: 31-10-2014 | Autor: Miloš Milenković | Kategorija: Bez kategorije

0

Do sada smo u dva članka (String funkcije (1. deo) i String funkcije (2. deo)) opisali većinu funkcija za rukovanje stringovima koje SQL server nudi. U ovom članku, koji ujedno predstavlja i poslednji u nizu članaka o string funkcijama, opisane su neke manje poznate funkcije, koje uprkos tome mogu biti veoma korisne.

Funkcija PATINDEX je veoma slična funkciji CHARINDEX i omogućava nam da pronađemo poziciju jednog stringa u okviru drugog stringa. Unapređenje PATINDEX-a u odnosu na CHARINDEX je u tome što string čiju poziciju tražimo u okviru većeg stringa može sadržati specijalne karaktere kao što su % i _, pa bi se moglo reći da funkcioniše veoma slično funkciji za poređenje LIKE, s tim što kao rezultat vraća poziciju stringa (paterna) u okviru drugog stringa. Sintaksa za upotrebu ove funkcije je PATINDEX(%patern koji se traži%, string koji se pretražuje). Prvi parametar je karakter ili niz karaktera čiju poziciju tražimo u drugom parametru. Potrebno je staviti procente na početku i na kraju stringa koji tražimo, osim ako smo sigurni da želimo da ga nađemo samo na početku ili kraju drugog stringa. U tom slučaju se procenat na početku, odnosno na kraju, može izostaviti. Procenat (%) ili donja crta (_), kao i ostali specijalni karakteri koji se koristi sa LIKE funkcijom, se mogu upotrebiti u srednjem delu prvog parametra. Rezultat poziva funkcije je celobrojna vrednost koja predstavlja poziciju traženog paterna u okviru stringa koji se pretražuje.
Upiti:

SELECT PATINDEX('%KEF%', 'SQLKEFALO');

SELECT PATINDEX('%K_F%', 'SQLKEFALO');

kao rezultat vraćaju 4, što predstavlja poziciju u stringu SQLKEFALO na kojoj se nalaze paterni zadati kao prvi parametar funkcije PATINDEX u oba upita.

Funkcija STR kao rezultat vraća string reprezentaciju broja prosleđenog kao prvi parametar. Puna sintaksa je STR(broj [,dužina [, broj decimala] ] ). Prvi parametar je broj koji želimo da konvertujemo u string. Očekivani tip podatka je decimal, ali se, naravno, može proslediti i ceo broj. Drugi parametar predstavlja dužinu stringa koji se dobija kao rezultat funkcije i obuhvata broj pozicija pre decimalnog separatora, separator i broj decimala. On nije obavezan i ukoliko se ne navede, podrazumevana vrednost je 10, što znači da ako je ukupna dužina broja nakon konverzije manja od 10, prvih 10-dužina stringa pozicija će biti popunjeno praznim stringom. S druge strane, u slučaju da je dužina konvertovanog broja veća od dužine zadate parametrom (od 10 ako se izostavi parametar), ukoliko je moguće zaokružiti broj, funkcija će vratiti zaokruženi broj na onoliko pozicija koliko je zadato parametrom. Ukoliko nije moguće zaokružiti broj, rezultat je niz od onoliko zvezdica kolika je dužina zadata u pozivu funkcije. Treći parametar je očekivani broj decimala u rezultatu. I on nije obavezan i ukoliko se ne navede, podrazumevana vrednost je 0, tj. rezultat neće sadržati decimale. Maksimalna vrednost za ovaj parametar je 16, pa tako ukoliko se navede vrednost veća od 16, funkcija će sama izvršiti skraćivanje na maksimalan broj decimala. Narednih nekoliko upita ilustruje upotrebu opisane funkcije:

SELECT STR(123.45);

Rezultat je: 123. Prvih 7 pozicija je popunjeno praznim stringom pošto nije zadat parametar za dužinu i podrazumeva se 10. Takođe, nije zadat parametar za broj decimala, pa se podrazumeva 0.

SELECT STR(123.45, 6, 2);

Rezultat je: 123.45. U ovom slučaju smo zadali oba parametra i dobijamo tačno ono što smo očekivali, broj prosleđen kao prvi parametar sa obe decimale.

SELECT STR(123.45, 2);

Rezultat je: **. Pošto broj nije mogao biti zaokružen tako da stane na dve pozicije funkcija vraća niz od zvezdica u dužini prosleđenog parametra.
Ukoliko imate vremena možete da probate još neke zanimljive kombinacije parametara i analizirate dobijene rezultate.

Funkcija QUOTENAME na početak i na kraj stringa koji se prosledi kao prvi parametar dodaje specijalne karaktere koji taj string pretvaraju u validni naziv za objekat u bazi. Sintaksa za ovu funkciju je QUOTENAME(string [,specijalni karakter]). Drugi parametar, specijalni karakter, nije obavezan i podrazumevana vrednost su uglaste zagrade ([]), a ukoliko se navodi, moguće vrednosti su jednostruki navodnik (‘) i dvostruki navodnik („). Najčešća primena ove funkcije je u cilju dodavanja uglastih zagrada na početak i kraj naziva neke kolone ili tabele u slučaju da u nazivu postoji razmak između dve ili više reči kako bi se naziv kolone ili tabele mogao nesmetano koristiti u upitima.
Upiti:

SELECT QUOTENAME('SQL KEFALO');
SELECT QUOTENAME('SQL KEFALO','''');
SELECT QUOTENAME('SQL KEFALO','"');

daju sledeće rezultate: [SQL KEFALO], ‘SQL KEFALO’ i „SQL KEFALO“.

Funkciji REPLICATE se kao prvi parametar prosleđuje proizvoljan string, a kao rezultat se dobija takođe string koji se sastoji od prosleđenog stringa ponovljenog onoliko puta koliko se zada drugim parametrom. Sintaksa kojom se poziva ova funkcija je REPLICATE (string, broj ponavljanja).
Upit:

SELECT REPLICATE('SQL|',5);

kao rezultat daje string: SQL|SQL|SQL|SQL|SQL|.

Funkcija REVERSE vraća string koji se prosledi kao parametar u potpuno obrnutom redosledu. Sintaksa je veoma jednostavna: REVERSE(string), a rezultat upita

SELECT REVERSE('SQLKEFALO');

je: OLAFEKLQS.

Funkcija FORMAT se koristi za prikazivanje podataka u određenom formatu koji se zadaje kao parametar. Sintaksa za poziv ove funkcije je FORMAT (vrednost, format [, kultura]). Prvi parametar je vrednost koju želimo da prikažemo u određenom formatu, drugi parametar je taj željeni format, a treći parametar koji nije obavezan se odnosi na jezička i regionalna podešavanja. Vrednosti koje se mogu zadati za ovaj parametar su [i]’en-US'[/i] za ‘US English’, [i]’en-GB'[/i] za ‘Great Britain English’, [i]’de-DE'[/i] za ‘German’ itd. Što se tiče vrednosti parametra za naše prostore, neke od mogućih vrednosti su: sr-Cyrl-CS, sr-Latn-CS, mk-MK, bs-Latn-BA, hr-HR itd. Ukoliko se ovaj parametar ne zada, podrazumevana vrednost se uzima iz trenutne sesije, što je u većini slučajeva podešavanje servera na kome se izvršava upit, ukoliko u istoj sesiji nije ranije eksplicitno promenjena kultura. Ova funkcija se najčešće koristi za prikazivanje datuma u željenom formatu, kao i brojeva koji se u zavisnosti od potrebe mogu prikazati u obliku koji sadrži valutu koja važi u specificiranom geografskom području i slično.
U nastavku je dato nekoliko upita koji prikazuju neke od slučajeva korišćenja funkcije FORMAT.
Upit

DECLARE @datum DATETIME = GETDATE();
SELECT FORMAT (@datum, 'd', 'en-US') AS [US English]
      ,FORMAT (@datum, 'd', 'en-GB') AS [Great Britain English]
      ,FORMAT (@datum, 'd', 'de-DE') AS [German]
      ,FORMAT (@datum, 'd', 'zh-CN') AS [Simplified Chinese (PRC)]
      ,FORMAT (@datum, 'd', 'sr-Latn-CS') AS [Serbian];

daje sledeći rezultat:
format rezultat

Rezultat upita

SELECT FORMAT(100, 'C', 'en-US') AS Dolar
	    ,FORMAT(100, 'C', 'de-DE') AS Euro
	    ,FORMAT(100, 'C', 'sr-Latn-CS') AS Dinar;

je:
format rezultat 2

string funkcije 3

Ovim završavamo opis string funkcija koje trenutno podržava SQL server.