BEGIN TRANSACTION …

(by: Jasmin Azemović)

Archive for the ‘Uncategorized’ Category

Demistificirani SQL (2)

with one comment

Nastavljamo sa serijom postova ispitnih zadataka koji se ubrajaju u Hall of Fame :). Sljedeći primjer je klasik u toj kategoriji, gdje se se igramo sa funkcijama za rad sa stringovima koje mogu biti jako korisne. Upit koji slijedi postoji u nekoliko verzija (različite baze podataka), ali poenta je svaki put ista. Primjer glasi nekako ovako:

Vaša kompanija je odlučila da svojim zaposlenicima dodjeli nove email adrese. Za tu svrhu će se iskoristiti postojeći podaci iz korporativne baze podataka. Izlaz treba biti u formatu tri nove kolone: Email, Lozinka i Starost. Pred vas su postavljeni sljedeći uslovi:

  • Email se formira od podataka u kolonama: LastName, FirstName, City i to sljedećem formatu: LastName.Firstname@City.Com (sve malim slovima);
  • Lozinka se formira od podataka iz kolona: Notes, Title i Addeess na sljedeći način. Spajanjam kolona (Notes, Title i Addeess). Sljedeći korak jeste da se sadržaj spajanja okrene obrnuto (reverzno). Nakon toga, iz dobivenog stringa, preskačemo prvih 17 karaketra i uzimamo sljedećih 8. Na pojedinim mjestma će se nalazi znak – (crtica) isti je potrebno zamjeniti sa znakom @
  • Starost se formira na osnovu kolone BirthDate i trenutnog datuma

Uslov je da se mail, lozinka i godina starosti generiše samo za one klijente koji imaju unesenu adresu.

Baza podataka Northwind. (9 zapisa)

Rješenje je:

USE Northwind
SELECT LOWER (LastName + '.' + FirstName + '@' + City + '.com') AS Email,
REPLACE (SUBSTRING ( REVERSE ((CONVERT (nvarchar,Notes)+Title+Address)),17,8), '-', '@') AS Lozinka,
DATEDIFF (year, BirthDate, GETDATE()) AS Godine
FROM dbo.Employees
WHERE Address IS NOT NULL
ORDER BY Godine DESC

Toliko za ovaj put.

END TRANSACTION
Advertisements

Written by Jasmin Azemović

15/09/2011 at 16:03

Posted in Uncategorized