String funkcije (2. deo)
Objavljeno: 29-07-2014 | Autor: Miloš Milenković | Kategorija: Funkcije, T-SQL
Ознаке: MIN
1
U jednom od prethodnih članaka (String funkcije (1. deo)) smo opisali neke od najčešće korišćenih funkcija za rukovanje stringovima. Ovaj članak donosi opis nekih manje poznatih funkcija.
SPACE funkcija kao rezultat vraća onoliko praznih mesta koliko prosledimo kao parametar. Sintaksa je SPACE(broj) gde parametar broj predstavlja praznih mesta.
Na osnovu opisanog ponašanja funkcije možemo zaključiti da je rezultat sledećeg upita:
SELECT 'SQL' + SPACE(5) + 'KEFALO';
niz karaktera SQL KEFALO.
CONCAT funkciju koristimo za povezivanje 2 ili više niza karaktera u jedan niz (string). To postižemo sintaksom: CONCAT(string1, string2, string3 … stringN), gde svaki od parametara predstavlja niz karaktera. Neophodno je proslediti najmanje 2 parametra, u suprotnom će se javiti greška. Pre povezivanja parametara, vrši se njihova implicitna konverzija u string. NULL vrednosti se implicitno konvertuju u prazan string. Tip podatka rezultata zavisi od parametara koje smo prosledili. Ukoliko je bar jedan od parametara UNICODE tipa (nchar/nvarchar) rezultat će biti UNICODE. U suprotnom će rezultat biti char/varchar. Što se tiče dužine, i ona zavisi od ulaznih parametara. Ako bar jedan od stringova na ulazu ima dužinu MAX (npr. varchar(max)) i rezultat će imati dužinu MAX. U ostalim slučajevima dužina rezultata je jednaka zbiru dužina pojedinačnih stringova.
Ukoliko izvršimo upit:
SELECT CONCAT('SQL', SPACE(5), 'KEFALO', '-', NULL, 'TEST');
dobijamo string SQL KEFALO-TEST.
Funkcije CHAR i NCHAR na osnovu parametra vraćaju odgovarajući karakter iz ASCII(http://www.asciitable.com/), odnosno UNICODE(http://www.unicode-table.com) tabele karaktera. Sintaksa je CHAR(ascii_integer), odnosno NCHAR(unicode_integer). Rezultat je tipa char(1) u prvom slučaju, odnosno nchar(1) u drugom. Parametri su tipa integer. U primeru ćemo videti kako nakon prosleđivanja parametara 67 i 262 koji predstavljaju redne brojeve slova C i Ć ASCII i UNICODE tabelama dobijamo upravo pomenuta slova.
Upiti:
SELECT CHAR(67); SELECT NCHAR(262);
kao rezultat daju slova C i Ć.
Funkcijama ASCII i UNICODE se postiže suprotno u odnosu na dve prethodno opisane funkcije. U ovom slučaju se prosleđuje karakter, a funkcije vraćaju njegovu poziciju u ASCCI odnosno UNICODE tabeli.
Nakon izvršavanja sledećeg upita:
DECLARE @slovo NCHAR(1); set @slovo = N'Ć'; SELECT ASCII(@slovo); SELECT UNICODE(@slovo);
kao rezultat dobijamo 67 i 262 respektivno.
Radi se o tome da u ASCII tabeli ne postoji slovo Ć, pa je rezultat 67 koji u stvari predstavlja slovo C. S druge strane, UNICODE tabela sadrži karaktere koji su specifični za pojedina pisma, kao što je slovo Ć, pa tako dobijamo njegovu poziciju u UNICODE tabeli.
Da bi primer bio jasniji potrebno je napomenuti da smo znak N kod dodeljivanja vrednosti promenljivoj @slovo morali navesti da bismo naglasili da želimo da promenljiva prihvati UNICODE karakter Ć. Da smo izostavili znak N promenljiva bi dobila vrednost C.
STUFF funkcija omogućava da u string umetnemo drugi string. Takođe, moguće je obrisati određen broj karaktera iz prvog stringa. Sintaksa je STUFF (string1, pozicija, dužina, string2). Prvi parametar je string u koji želimo da umetnemo poslednji parametar, drugi parametar je pozicija u prvom stringu na koju će drugi string bti umetnut, a dužina je broj karaktera koji se brišu iz prvog stringa počevši od pozicije zadate preko druge pozicije.
Upit
SELECT STUFF('SQLKEFALO', 4, 3, 'SMET');
kao rezultat daje SQLSMETALO.
Funkcija SOUNDEX vraća niz od četiri karaktera koji omogućava poređenje dva stringa i utvrđivanje njihove sličnosti. SOUNDEX konvertuje string koji se prosledi kao parametar u niz od četiri karaktera na osnovu toga kako zvuči izgovor prosleđenog stringa. Prvi karakter u nizu je jednak prvom karakteru stringa (ukoliko je u pitanju malo slovo prebacuje se u veliko). Karakteri od druge do četvrte pozicije su brojevi koji se posebnim algoritmom dobijaju od elemenata stringa. Slova A, E, I, O, U, H, W i Y se ignorišu osim ako nisu na prvom mestu u stringu. Ukoliko je neophodno na kraj niza se dodaju nule da bi se došlo do četiri karaktera. Sintaksa je SOUNDEX(string), a sledeći upit
SELECT SOUNDEX('SQLKEFALO'), SOUNDEX('SQLKAFALA');
kao rezultat daje sledeća dva niza karaktera: S421, S421 koji su identični pošto se dva stringa koje poredimo razlikuju samo u samoglasnicima koji se ignorišu kao što je već objašnjeno.
DIFFERENCE je funkcija koja u pozadini koristi prethodno opisanu funkciju SOUNDEX i vraća celobrojnu vrednost između 0 i 4 koja označava razliku između rezultata SOUNDEX funkcije za dva prosleđena parametra, gde 0 označava najveću razliku, a 4 najmanju razliku, odnosno potpuno poklapanje. Sintaksa je DIFFERENCE(string1, string2).
Kao rezultat upita:
SELECT DIFFERENCE('SQLKEFALO','SQLKAFALA');
dobijamo celobrojnu vrednost 4 koja označava potpuno poklapanje SOUNDEX vrednosti navedena dva stringa.
[…] 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 […]