5 Ekim 2012 Cuma

TSQL ile Belirli bir Sayı veya Tarih Aralığında Bir Seri Üretmek


TSQL de With kullanarak belirli sayıda elemanı olan bir seri oluşturabilirsiniz. Örneğin 1 den başlayarak 1000'e kadar olan integer sayılardan oluşan bir seri oluşturmak istiyorsanız aşağıdaki scripti kullanabilirsiniz

Integer-Serisi

?
1
2
3
4
5
6
7
8
9
WITH T(ID) AS
(
    SELECT 1 ID
    UNION ALL SELECT ID + 1
    FROM T
    WHERE ID < 1000
)
SELECT * FROM T
OPTION (MAXRECURSION 1000)
Eğer bir tarihten başlayarak belirli bir tarihe kadar olan tüm günleri barındıran bir seri oluşturmak istersek bu sefer aşağıdaki gibi bir script kullanmamız gerekir.
Aşağıdaki script 2011.01.01 tarihinden itibaren tarihe 1 gün ekleyerek bugune kadar tüm tarihleri oluşturur. maxrecursion 1000 diyerek ise en fazla 1000 tane oluştur demiş oluyoruz. 2011.01.01 den günümüze(2012.10.05) yaklaşık 645 gün olduğu için max recursion sayısına ulaşamayız. Eğer bu değeri düzgn vermez isek aşağıdaki hatayı alırız.
Msg 530, Level 16, State 1, Line 1
The statement terminated. The maximum recursion 1000 has been exhausted before statement completion.

İki Tarih Arasındaki tüm Günler için Seri Oluşturmak

?
1
2
3
4
5
6
7
8
9
10
WITH T(Date) AS
(
    SELECT CONVERT(datetime, '20110101') Date
    UNION ALL
    SELECT DATEADD(dd, 1, Date)
    FROM T
    WHERE Date < GETDATE()
)
SELECT * FROM T
OPTION (MAXRECURSION 1000)

Hiç yorum yok:

Yorum Gönder