PchełkiPchełki SQL

Pchełki SQL: leniwe przestępne

Pisałem kiedyś o latach przestępnych: skąd się wzięły, na czym polegają i tak dalej.

Algo-rytm prze-stęp-NY

Dziś szybciutko o bardzo prostym, a zarazem bardzo efektownym sposobie sprawdzenia, czy dany rok jest przestępny czy nie. Za pomocą języka SQL!

W klasycznym podejściu sprawdzilibyśmy, czy numer roku dzieli się przez cztery, przez sto i przez czterysta, i na tej bazie skonstruowalibyśmy zgrabny i (względnie) prosty algorytm.

Ja jednak jestem leniwy, dlatego skorzystam z drogi na skróty:

Rok przestępny to taki rok, który ma 366 dni, prawda?
Ten dodatkowy dzień to oczywiście 29 lutego.
Wystarczy więc sprawdzić, czy w danym roku występuje 29 lutego – i gotowe!

Oczywiście jest to podejście wybitnie nieeleganckie: zwalamy całą brudną robotę na silnik bazy danych, który przecież „wie” czy dany rok jest przestępny. Zero elegancji.

Ale działa…

Zróbmy prosty test; sprawdzimy które lata z przedziału 1900 – 2500 są przestępne:

SET NOCOUNT ON
DECLARE @year INT = 1900
DECLARE @t TABLE (y VARCHAR(4))
WHILE @year < 2500
BEGIN
    INSERT @t
    SELECT @year
    WHERE ISDATE(CAST(@year AS CHAR(4)) + '0229') = 1
    SET @year += 1
END

SELECT STUFF((SELECT ', ' + y FROM @t FOR XML PATH('')), 1, 2, '')

Wynik:

1904, 1908, 1912, 1916, 1920, 1924, 1928, 1932, 1936, 1940, 1944, 1948, 1952, 1956, 1960, 1964, 1968, 1972, 1976, 1980, 1984, 1988, 1992, 1996, 2000, 2004, 2008, 2012, 2016, 2020, 2024, 2028, 2032, 2036, 2040, 2044, 2048, 2052, 2056, 2060, 2064, 2068, 2072, 2076, 2080, 2084, 2088, 2092, 2096, 2104, 2108, 2112, 2116, 2120, 2124, 2128, 2132, 2136, 2140, 2144, 2148, 2152, 2156, 2160, 2164, 2168, 2172, 2176, 2180, 2184, 2188, 2192, 2196, 2204, 2208, 2212, 2216, 2220, 2224, 2228, 2232, 2236, 2240, 2244, 2248, 2252, 2256, 2260, 2264, 2268, 2272, 2276, 2280, 2284, 2288, 2292, 2296, 2304, 2308, 2312, 2316, 2320, 2324, 2328, 2332, 2336, 2340, 2344, 2348, 2352, 2356, 2360, 2364, 2368, 2372, 2376, 2380, 2384, 2388, 2392, 2396, 2400, 2404, 2408, 2412, 2416, 2420, 2424, 2428, 2432, 2436, 2440, 2444, 2448, 2452, 2456, 2460, 2464, 2468, 2472, 2476, 2480, 2484, 2488, 2492, 2496

Jak widać system działa bez pudła. Wymienione są wszystkie lata podzielne przez 4, z wyjątkiem podzielnych przez 100, no chyba że dzielą się przez 400…

Proste?

No ba.

Show More

xpil

Po czterdziestce. Żonaty. Dzieciaty. Komputerowiec. Krwiodawca. Emigrant. Rusofil. Lemofil. Sarkastyczny. Uparty. Mól książkowy. Ateista. Apolityczny. Nie oglądam TV. Uwielbiam matematykę. Walę prosto z mostu. Gram na paru instrumentach. Lubię planszówki. Słucham bluesa, poezji śpiewanej i kapel a'capella. || Kliknij tutaj po więcej szczegółów ||

Dodaj komentarz

5 komentarzy do "Pchełki SQL: leniwe przestępne"

avatar
  Subscribe  
najnowszy najstarszy oceniany
Powiadom o
Rzast
Gość

Mała korekta:
w tekście (zaraz przed komendą SQL) piszesz, że od 1950, a sprawdzasz od 1900.
A teraz szybciutko kawusię i poprawiać 😉

Butter
Gość

bruforce? a fe ;))

Polak we Francji
Gość

Troche zabawne.Praktyczne. Kiedys mnie programowanie odrobine interesowalo. SQL sie przydaje.