Rekurzivni CTE za kreiranje datuma

Objavljeno: 05-03-2014 | Autor: Nenad Živković | Kategorija: T-SQL, Trikovi

Ознаке: , ,

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)