Dateadd sql server to jedna z najczęściej używanych, a zarazem najczęściej błędnie rozumianych funkcji w języku T-SQL. Niezależnie od tego, czy dopiero zaczynasz pracę z bazami danych Microsoft SQL Server, czy jesteś doświadczonym administratorem — zrozumienie, jak precyzyjnie manipulować datami, potrafi zadecydować o poprawności raportów finansowych, harmonogramów produkcyjnych czy systemów rozliczeniowych. W tym przewodniku pokażę Ci nie tylko suchą składnię, ale przede wszystkim praktyczne scenariusze biznesowe, które spotkasz w codziennej pracy. Jeśli szukasz sprawdzonego źródła wiedzy przed wdrożeniem nowego rozwiązania w firmie — trafiłeś idealnie.
Czym jest funkcja DATEADD w SQL Server?
Funkcja DATEADD dodaje (lub odejmuje) określoną liczbę jednostek czasu do wskazanej daty i zwraca nową, zmodyfikowaną wartość typu datetime, datetime2, smalldatetime, date lub datetimeoffset. Inaczej mówiąc: bierzesz datę bazową, mówisz silnikowi bazy danych „chcę przesunąć ją o X dni / miesięcy / godzin” i otrzymujesz wynik.
Od wersji SQL Server 2022 (oraz w chmurze Azure SQL Database, SQL Managed Instance i Microsoft Fabric) funkcja nie zmieniła swojego zachowania względem poprzednich wydań — Microsoft utrzymuje pełną wsteczną kompatybilność. W 2026 roku nadal obowiązuje standardowa sygnatura:
DATEADD (datepart, number, date)
Gdzie datepart to jednostka czasu (np. year, month, day), number to liczba całkowita (dodatnia lub ujemna), a date to wyrażenie daty. Wynik jest zawsze nową wartością — oryginalna data nie ulega modyfikacji, co jest kluczowe przy budowaniu zapytań osadzonych w widokach i procedurach składowanych.
Składnia i parametry — pełna referencja na 2026 rok
Parametr datepart — dozwolone wartości
Pierwszy argument funkcji dateadd sql server określa, jaką jednostkę czasu modyfikujesz. Oto kompletna tabela wartości obsługiwanych przez SQL Server 2025 i 2026:
| datepart | Skrót | Przykład przesunięcia |
|---|---|---|
year | yy, yyyy | +1 = ten sam dzień za rok |
quarter | qq, q | +1 = ten sam dzień w następnym kwartale |
month | mm, m | +1 = za miesiąc |
dayofyear | dy, y | identyczne jak day |
day | dd, d | +1 = następny dzień |
week | wk, ww | +1 = za tydzień |
weekday | dw, w | +1 = następny dzień (identyczne jak day) |
hour | hh | +1 = za godzinę |
minute | mi, n | +1 = za minutę |
second | ss, s | +1 = za sekundę |
millisecond | ms | +1 = za milisekundę |
microsecond | mcs | +1 = za mikrosekundę |
nanosecond | ns | +1 = za nanosekundę |
Warto zapamiętać: weekday (dw) oraz dayofyear (dy) zachowują się identycznie jak day — nie oczekuj, że weekday pominie weekend. To częsta pułapka nawet wśród średnio zaawansowanych programistów T-SQL.
Parametr number — liczby dodatnie i ujemne
Drugi parametr akceptuje wartości typu int. Podanie liczby ujemnej powoduje przesunięcie wstecz. Na przykład DATEADD(day, -30, GETDATE()) zwróci datę sprzed 30 dni. Jeżeli wartość nie jest liczbą całkowitą — SQL Server obcina część ułamkową, nie zaokrągla. Zatem DATEADD(month, 2.9, '2026-01-15') doda 2 miesiące, a nie 3.
Parametr date — typy wejściowe
Trzeci argument akceptuje: date, datetime, datetime2, datetimeoffset, smalldatetime oraz time (tylko przy datepartach czasowych). Jeżeli przekażesz time i spróbujesz dodać month — otrzymasz błąd. Ta reguła nie zmieniła się od lat i w 2026 nadal obowiązuje.
Praktyczne przykłady użycia DATEADD
Dodawanie dni i odejmowanie godzin
Najprostszy przypadek to przesunięcie daty o konkretną liczbę dni:
SELECT DATEADD(day, 7, '2026-06-08') AS ZaTydzien;
-- Wynik: 2026-06-15
Przesunięcie wstecz o 3 godziny:
SELECT DATEADD(hour, -3, GETDATE()) AS TrzyGodzinyTemu;
W biznesie spotkasz to przy generowaniu przedziałów czasowych dla raportów — np. „pokaż zamówienia z ostatnich 48 godzin”. Wystarczy:
WHERE OrderDate >= DATEADD(hour, -48, GETDATE())
Obliczanie końca miesiąca i pierwszego dnia kolejnego
Częsty scenariusz księgowy: potrzebujesz ostatniego dnia bieżącego miesiąca. Użyj EOMONTH, ale jeśli chcesz to zrobić wyłącznie z DATEADD (np. dla wersji przed SQL Server 2012):
SELECT DATEADD(day, -1, DATEADD(month, 1, DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), 1))) AS OstatniDzienMiesiaca;
W nowszych wersjach SQL Server lepiej używać natywnego EOMONTH(GETDATE()), ale znajomość konstrukcji z DATEADD przydaje się przy migracji starszych systemów w 2026 roku — wiele firm wciąż utrzymuje bazy na SQL Server 2016 czy 2019.
Generowanie sekwencji dat
W połączeniu z funkcjami okienkowymi i ROW_NUMBER() możesz wygenerować kalendarz:
WITH Liczby AS (
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) - 1 AS n
FROM sys.all_columns
)
SELECT DATEADD(day, n, '2026-01-01') AS Data
FROM Liczby
WHERE n < 365;
Taka konstrukcja przydaje się w hurtowniach danych, gdzie tabela dat (dimDate) wymaga uzupełnienia o nowe wiersze na początku roku fiskalnego.
DATEDIFF, DATEPART i DATENAME — jak łączyć z DATEADD?
DATEADD rzadko występuje samodzielnie. W prawdziwych zapytaniach towarzyszą mu trzy siostrzane funkcje: DATEDIFF, DATEPART i DATENAME. Opanowanie ich współdziałania to fundament produktywności T-SQL.
DATEDIFF — obliczanie różnicy
DATEDIFF zwraca liczbę jednostek czasu pomiędzy dwiema datami. Częsty wzorzec: znajdź wiek transakcji w dniach:
SELECT DATEDIFF(day, OrderDate, GETDATE()) AS WiekDni FROM Orders;
Połączone z DATEADD daje potężne narzędzie: użytkownik podaje przedział „ostatnie N dni”, a Ty dynamicznie generujesz datę graniczną.
DATEPART — wyciąganie składowej daty
DATEPART zwraca konkretny element daty (rok, miesiąc, dzień tygodnia). Przykład: znajdź wszystkie faktury wystawione w poniedziałki — bez przeliczania dat na tekst:
WHERE DATEPART(weekday, InvoiceDate) = 2
W połączeniu z DATEADD możesz np. obliczyć pierwszy poniedziałek po danej dacie.
DATENAME — nazwa słowna
DATENAME działa podobnie do DATEPART, ale zwraca nazwę miesiąca lub dnia tygodnia w języku ustawionym na serwerze. W raportach SSRS 2026 często widuje się:
SELECT DATENAME(month, DATEADD(month, 1, GETDATE())) AS PrzyszlyMiesiac;
DATEADD w SQL Server 2025 i 2026 — co nowego?
Wydanie SQL Server 2025 (kompilacja wewnętrzna, następca wersji 2022) wprowadziło kilka usprawnień w silniku dat, ale sama funkcja DATEADD pozostała nienaruszona. Microsoft skupił się na optymalizacjach wydajnościowych i integracji z Azure Arc. W 2026 roku warto znać trzy obszary:
Obsługa datetimeoffset i stref czasowych
Od SQL Server 2016 DATEADD obsługuje typ datetimeoffset, ale w wersji 2025 poprawiono wydajność operacji na tym typie przy przesunięciach o dni i godziny. Jeśli Twoja aplikacja działa globalnie — używaj AT TIME ZONE razem z DATEADD:
SELECT DATEADD(hour, 5, SYSDATETIMEOFFSET()) AT TIME ZONE 'Central European Standard Time';
Wydajność w kolumnach generowanych
W SQL Server 2025 zoptymalizowano sposób, w jaki optymalizator zapytań traktuje kolumny wyliczane (computed columns) zawierające DATEADD. Dzięki temu indeksy na takich kolumnach są teraz wykorzystywane agresywniej — co ma znaczenie przy tabelach faktów liczących miliardy wierszy.
SQL Server w Microsoft Fabric
W 2026 roku Microsoft Fabric oferuje natywną obsługę DATEADD w swoich endpointach SQL-owych (zarówno Warehouse, jak i Lakehouse SQL Endpoint). Funkcja zachowuje się identycznie jak w klasycznym SQL Server, więc umiejętności zdobyte w on-premises przenosisz bezpośrednio do chmury.
Najczęstsze błędy i pułapki
Pułapka nr 1: mylenie weekday z dniem roboczym
DATEADD(weekday, 1, '2026-06-05') — piątek. Wynik to sobota. Funkcja nie pomija weekendów. Jeśli potrzebujesz przesunięcia wyłącznie o dni robocze, musisz napisać własną logikę warunkową.
Pułapka nr 2: przepełnienie zakresu dat
SQL Server akceptuje daty od 1 stycznia 1753 do 31 grudnia 9999 (dla datetime). Próba dodania miliona lat zakończy się błędem:
The datepart parameter is out of range.
Pułapka nr 3: brakujące godziny przy zmianie czasu
DATEADD(hour, 24, '2026-03-28 02:00:00') w strefie CET nie uwzględni przejścia na czas letni. Wynik to 2026-03-29 02:00:00 — a w rzeczywistości z punktu widzenia zegara ściennego minęło 23 lub 25 godzin. Do obliczeń biznesowych z uwzględnieniem DST używaj datetimeoffset i AT TIME ZONE.
Pułapka nr 4: niejawne konwersje typów
Przekazanie łańcucha znaków jako daty działa, ale poleganie na domyślnej konwersji to proszenie się o błąd przy zmianie ustawień językowych serwera. Zawsze jawnie konwertuj:
-- ŹLE, zależne od języka serwera:
DATEADD(day, 10, '06/08/2026')
-- DOBRZE:
DATEADD(day, 10, '2026-06-08')
Częste pytania
Czy DATEADD działa na typie time?
Tak, ale tylko z datepartami czasowymi: hour, minute, second, millisecond, microsecond, nanosecond. Próba dodania day lub month do wartości typu time kończy się błędem.
Jaka jest różnica między day a dayofyear?
Z perspektywy DATEADD — żadna. Obie wartości dają identyczny rezultat. Różnica istnieje tylko w DATEPART, gdzie dayofyear zwraca numer dnia w roku (1–366), a day — numer dnia w miesiącu.
Czy liczba w DATEADD może być ułamkiem?
SQL Server obcina część ułamkową (nie zaokrągla), ale takie zachowanie jest niezalecane w kodzie produkcyjnym — zmniejsza czytelność i może prowadzić do nieporozumień.
Jak dodać miesiące, unikając problemu z 31. dniem?
Jeśli do 31 stycznia dodasz miesiąc, DATEADD(month, 1, '2026-01-31') zwróci 28 lutego 2026 (lub 29 w roku przestępnym). To poprawne i zgodne z dokumentacją — SQL Server nie próbuje „dopasować” wyniku do 31. dnia.
Czy DATEADD obsługuje lata przestępne?
Tak, w pełni. DATEADD(year, 1, '2024-02-29') zwraca 2025-02-28, ponieważ rok 2025 nie jest przestępny. Silnik automatycznie koryguje datę do poprawnej wartości kalendarzowej.
Jak szybko działa DATEADD na dużych tabelach?
DATEADD jest funkcją deterministyczną i wysoce zoptymalizowaną. W SQL Server 2025 operacja na 10 milionach wierszy z WHERE DATEADD(day, -30, GETDATE()) wykonuje się w czasie poniżej sekundy na przeciętnym sprzęcie serwerowym — pod warunkiem odpowiedniego indeksowania.
Czy mogę używać DATEADD wewnątrz WHERE bez utraty wydajności?
Tak, pod warunkiem, że nie stosujesz DATEADD na kolumnie. Porównaj:
-- WOLNO: funkcja na kolumnie uniemożliwia użycie indeksu
WHERE DATEADD(day, 30, OrderDate) > GETDATE()
-- SZYBKO: funkcja na wartości stałej, indeks działa
WHERE OrderDate > DATEADD(day, -30, GETDATE())
Czy DATEADD działa inaczej w Azure SQL niż w on-premises?
Nie. Microsoft utrzymuje spójność API między SQL Server on-premises a Azure SQL Database. Jedyna różnica to ścieżka wdrożenia aktualizacji — Azure otrzymuje poprawki szybciej.
Czy funkcja DATEADD obsługuje kalendarze inne niż gregoriański?
Nie natywnie. SQL Server zawsze operuje na kalendarzu gregoriańskim. Jeśli potrzebujesz obsługi kalendarza hijri lub fiscal 4-4-5 — musisz zbudować własną warstwę abstrakcji.
Czy warto kupić licencję SQL Server 2025 dla lepszej wydajności DATEADD?
Wydajność samej funkcji DATEADD nie zmieniła się drastycznie od wersji 2016. Decyzja o zakupie nowszej wersji SQL Server powinna opierać się na innych czynnikach — skalowalności, bezpieczeństwie, wsparciu dla kontenerów Linux i integracji z chmurą. Jeśli planujesz migrację lub nowe wdrożenie, KluczeSoft.pl oferuje oryginalne licencje Microsoft SQL Server w konkurencyjnych cenach z natychmiastową dostawą — co przy budżetowaniu projektów IT w 2026 roku realnie obniża całkowity koszt posiadania infrastruktury.
Podsumowanie
Funkcja dateadd sql server to coś więcej niż prosty dodatek arytmetyczny do dat. To mechanizm napędzający logikę biznesową w raportach, systemach ERP, hurtowniach danych i integracjach międzyplatformowych. Znajomość jej niuansów — od różnic między weekday a day, przez interakcję z DATEDIFF i DATEPART, aż po optymalizację zapytań na miliardowych zbiorach — odróżnia juniora od inżyniera, któremu można powierzyć architekturę systemu.
Kluczowe wnioski: używaj jawnych konwersji typów, pamiętaj o pułapkach stref czasowych, buduj zapytania tak, aby DATEADD operował na stałych, a nie na kolumnach — i testuj wyniki na danych brzegowych. SQL Server w 2026 roku daje Ci solidne, przewidywalne narzędzie. Wystarczy, że użyjesz go świadomie.
Sprawdź też
- Sql server management studio — kompletny przewodnik 2026
- Ms SQL Server Express — kompletny przewodnik 2026
- SQL Server — kompletny przewodnik 2026
- Sql Server Express — kompletny przewodnik 2026
Potrzebujesz licencji? Microsoft SQL Server — sprawdź ofertę KluczeSoft.pl — legalne klucze, faktura VAT, dostawa e-mail.
<!-- INLINE-LINKS-V1 -->