IF OBJECT_ID('tempdb..#Brojevi') IS NOT NULL DROP TABLE #Brojevi
CREATE TABLE #Brojevi (Broj int NOT NULL CHECK (Broj > 0))
;
INSERT INTO #Brojevi (Broj) VALUES (9);
INSERT INTO #Brojevi (Broj) VALUES (1);
INSERT INTO #Brojevi (Broj) VALUES (100);
INSERT INTO #Brojevi (Broj) VALUES (86);
INSERT INTO #Brojevi (Broj) VALUES (10);
INSERT INTO #Brojevi (Broj) VALUES (94);
INSERT INTO #Brojevi (Broj) VALUES (195);
INSERT INTO #Brojevi (Broj) VALUES (99);
INSERT INTO #Brojevi (Broj) VALUES (6);
INSERT INTO #Brojevi (Broj) VALUES (52);
;
Treba napisati kveri koji formatira brojeve tako sto dodaje nule na pocetku, ali ne vise nula nego sto je potrebno.
Rezultat kverija treba da izgleda ovako:
Broj BrojFMT
----------- -------
9 009
1 001
100 100
86 086
10 010
94 094
195 195
99 099
6 006
52 052
(10 row(s) affected)
U cemu je fora sa ovom mozgalicom? Kveri treba da formatira brojeve tako da je broj nula minimalan. Ovo znaci da broj nula zavisi od broja cifara najveceg broja u tabeli. Ako je najveci broj trocifren, rezultat, kolona BrojFMT treba da ima tacno 3 karaktera. Ako je najveci broj sa 9 (devet cifara), onda rezultat treba formatirati na 9 znakova. Ako je najveci broj dvocifren, trazi se BrojFMT duzne dva znaka.
Ako sada dodam jeden sestocifreni broj, 999999, treba da mi sve bude formatirano na 6 cifara:
INSERT INTO #Brojevi (Broj) VALUES (999999);
-- Novi rezultat:
Broj BrojFMT
----------- -------
9 000009
1 000001
100 000100
86 000086
10 000010
94 000094
195 000195
99 000099
6 000006
52 000052
999999 999999
(11 row(s) affected)
Sve je dozvoljeno, cak i kursori, mada se ne smatraju dobrim resenjem.
Ako neko brzo resi ovo, jer je mozda lako, samo ja nevidim prosto resenje, prosirite problem tako da se ukljuce i nule. Ovom mozgalicom, trazi se resenje samo za brojeve vece od nule. Ja imam lepo resenje za vece od nule, nulu i negativne nisam probao. Kao ni decimale. U mom resenju, uvodjenje nule komplikuje stvar vise nego uvodjenje negativnih brojeva. Negativni brojevi , nule i decimalesu moguca prosirenja zadatka.
Ko kaze da u SQL nema sta da se istrazuje i resava? Mozda je sve ovo trivijalno u nekomORACLE ili PostGres ili Firebird, ko zna, cilj je da saznamo nesto novo i da se zabavimo.
Na posao :-)