Jak policzyć Wielki Piątek

Jak policzyć Wielki Piątek
pdf ePub czas dodania: 2018:03:30 20:47 komentarzy 0
Składam wszystkim wesołych i pogodnych świąt Zmartwychwstania Chrystusa

Ciężar krzyża długo ważę
Zanim dam do poniesienia.
Nim nagradzam, a nie karzę!
Wszak istotą jest zbawienia!

Praczuk

A w prezencie przesyłam funkcję w SQL, którą możecie sobie policzyć kiedy wypada Wielki Piątek:

CREATE FUNCTION dbo.Wielkanoc(@rok As Int)
/* SELECT
       dbo.Wielkanoc(a.x + b.x) as Wielki_Piatek
FROM
       (VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) as a(x)
       CROSS JOIN
       (VALUES (33),(1405),(2010),(2020),(2030)) as b(x)
ORDER BY
       Wielki_Piatek
*/

RETURNS date
BEGIN
    DECLARE @a int, @b int, @c int, @d int, @miesiac int, @dzien int  
       IF @rok < 32 --Wtedy nie było Wielkanocy!
        SELECT
                    @dzien = 0,
                    @miesiac = 0
       ELSE IF @rok between 33 and 1582 --Metoda Gaussa dla kalendarza juliańskiego
       BEGIN
             SET @a = (@rok % 19 * 19 + 15) % 30
             SET @b = (@rok % 4 * 2 + @rok % 7 * 4 + 6 * @a + 6) % 7     
             IF @a + @b < 10
                    SELECT
                           @dzien = @a + @b + 22,
                           @miesiac = 3
        ELSE
                    SELECT
                           @dzien = @a + @b - 9,
                           @miesiac = 4
       END
       ELSE --Metoda Meeusa/Jonesa/Butchera dla kalendarza gregoriańskiego
       BEGIN
             SET @a = (@rok % 19 * 19 + @rok / 100 - @rok / 100 / 4 - ((@rok / 100 - (@rok / 100 + 8) / 25 + 1) / 3) + 15) % 30
             SET @b = (32 + @rok / 100 % 4 * 2 + @rok % 100 / 4 * 2 - @a - @rok % 100 % 4) % 7
             SET @c = (@rok % 19 + 11 * @a + 22 * @b) / 451
             SET @d = @a + @b - 7 * @c + 114
             SET @dzien = @d % 31 + 1
        SET @miesiac = @d / 31
       END
    RETURN dateadd(day,-2,DATEFROMPARTS(@rok, @miesiac, @dzien))
END

Grzegorz GPS Świderski


Buty  <- poprzednia notka
następna notka -> Kto układa scenariusze?

 

licznik: 7014 + 0 / 0 - promuj
captcha
x

Zgłoszenie komentarza

dodaj komentarz

x
komentarzy: 0 kolejność: wg punktacji najstarsze najnowsze