Rekurzivni CTE za kreiranje datuma
Objavljeno: 05-03-2014 | Autor: Nenad Živković | Kategorija: T-SQL, Trikovi
Ознаке: Datumi, DB mail, Instead of update trigger
0
Ukoliko vam je potrebno da izvučete sve datume u nekom periodu, to možete učiniti uz pomoć rekurzivnog CTE kome zadate početni i krajnji datum. U baznom delu se selektuje početni datum, a u rekurzivnom dodaje po jedan dan dok ne stigne do krajnjeg. Primer je u sledećem upitu:
DECLARE @pocetni DATE; DECLARE @krajnji DATE; SET @pocetni = '20131226'; SET @krajnji = '20140304'; WITH datumi AS ( SELECT @pocetni AS DT UNION ALL SELECT DATEADD(DD, 1, DT) FROM datumi WHERE DATEADD(DD, 1, DT) <= @krajnji ) SELECT * FROM datumi OPTION (MAXRECURSION 0);
Česta praktična primena ovako nečega je kada u svojoj tabeli imate rupe u datumima, odnosno datume za koje nemate svoje zapise, i potrebno vam je da se prikažu ili popune nekim vrednostima. Samo vežete OUTER JOIN-om svoju tabelu na jedan ovakav CTE i popunite NULL vrednosti svojim potrebnim podacima.
PS: Ukoliko vam je potrebno više od 100 dana ne zaboravite da dodate na kraju upita hint za ukidanje maksimalne rekurzije OPTION (MAXRECURSION 0)