
Funkcja DATEDIFF
w SQL jest jednym z najczęściej używanych narzędzi do operacji na datach. Dzięki niej możemy w prosty sposób obliczyć różnicę między dwiema datami, co jest niezwykle przydatne w licznych scenariuszach, takich jak analiza danych, raportowanie czy planowanie.
Co to jest DATEDIFF i jak działa?
DATEDIFF
to funkcja, która pozwala obliczyć różnicę między dwiema datami w określonej jednostce czasu, np. dniach, miesiącach czy latach. W zależności od używanej bazy danych jej składnia może się nieco różnić.
Podstawowa składnia funkcji DATEDIFF
W najbardziej popularnych systemach baz danych, takich jak SQL Server i MySQL, składnia funkcji DATEDIFF
wygląda następująco:
DATEDIFF(jednostka_czasu, data_początkowa, data_końcowa)
Gdzie:
- jednostka_czasu – określa, w jakiej jednostce chcesz obliczyć różnicę (dni, miesiące, lata itp.).
- data_początkowa – pierwsza data (zazwyczaj wcześniejsza).
- data_końcowa – druga data, od której odejmujemy pierwszą.
Użycie DATEDIFF w różnych systemach bazodanowych
Każdy system bazodanowy ma swoją własną implementację DATEDIFF
. Poniżej przedstawiam przykłady dla najpopularniejszych systemów.
SQL Server
W SQL Server funkcja DATEDIFF
działa w następujący sposób:
SELECT DATEDIFF(DAY, '2024-01-01', '2024-06-01') AS roznica_dni;
Wynik: 152
(ponieważ między 1 stycznia a 1 czerwca jest dokładnie 152 dni).
MySQL
W MySQL funkcja działa nieco inaczej – zwraca różnicę w dniach bez potrzeby określania jednostki:
SELECT DATEDIFF('2024-06-01', '2024-01-01') AS roznica_dni;
Wynik również wyniesie 152
. Warto zauważyć, że w MySQL DATEDIFF
działa tylko na poziomie dni – nie obsługuje innych jednostek czasu.
PostgreSQL
W PostgreSQL do podobnego efektu należy użyć operatora różnicy:
SELECT AGE('2024-06-01', '2024-01-01');
Wynik: 5 mons 31 days
, co oznacza 5 miesięcy i 31 dni różnicy.
Przykłady praktycznego zastosowania DATEDIFF
1. Obliczanie wieku użytkowników
Jeżeli mamy w bazie danych tabelę users
z kolumną birth_date
, możemy obliczyć wiek użytkowników w SQL Server:
SELECT name, DATEDIFF(YEAR, birth_date, GETDATE()) AS wiek FROM users;
2. Filtracja rekordów na podstawie daty
Załóżmy, że chcemy znaleźć wszystkie zamówienia z ostatnich 30 dni:
SELECT * FROM orders WHERE DATEDIFF(DAY, order_date, GETDATE()) <= 30;
3. Analiza różnicy między dwiema kolumnami
W tabeli tasks
przechowujemy kolumny start_date
i end_date
. Możemy sprawdzić czas trwania każdego zadania:
SELECT task_name, DATEDIFF(DAY, start_date, end_date) AS czas_trwania FROM tasks;
Jednostki czasu w DATEDIFF
W SQL Server możemy używać różnych jednostek czasu:
Jednostka | Opis | Przykład |
---|---|---|
YEAR | Różnica w latach | DATEDIFF(YEAR, '2000-01-01′, '2024-01-01′) |
MONTH | Różnica w miesiącach | DATEDIFF(MONTH, '2024-01-01′, '2024-06-01′) |
DAY | Różnica w dniach | DATEDIFF(DAY, '2024-01-01′, '2024-06-01′) |
Najczęstsze błędy i pułapki
Podczas pracy z DATEDIFF
warto pamiętać o kilku kwestiach:
- Kierunek różnicy ma znaczenie – zamiana miejscami dat może zmienić wynik na ujemny.
- Różnice w implementacji – w MySQL funkcja obsługuje tylko dni, podczas gdy w SQL Server możemy używać różnych jednostek czasu.
- Brak sekund i milisekund – w niektórych zastosowaniach może być konieczne użycie innych funkcji, takich jak
DATEDIFF_BIG
w SQL Server.
Podsumowanie
Funkcja DATEDIFF
w SQL jest niezwykle użyteczna, gdy potrzebujemy szybko obliczyć różnicę między dwiema datami. Warto pamiętać o różnicach w jej implementacji w różnych systemach bazodanowych. Niezależnie od tego, czy analizujesz zamówienia, obliczasz wiek użytkowników czy filtrujesz wyniki, DATEDIFF
jest funkcją, której warto się nauczyć.
Inny ciekawy artykuł:
Jak działa DATEADD w języku SQL? Przykłady zastosowania
Opanuj SQL z moim kursem!
Poznasz zarówno podstawy, jak i zaawansowane zapytania analityczne (CTE, subqueries, window functions). Nauczysz się pracować na różnych silnikach – na kursie pracujemy zarówno na MySQL, jak i na Postgres. Wszystko zainstalujemy na Twoim komputerze, plus dostaniesz mnóstwo zestawów danych do ćwiczeń.
Zostań analitykiem danych – dołącz do KajoDataSpace!
Najlepsza ścieżka do zawodu analityka danych. Dostęp do pełnych wersji kursów online z Excela, SQLa, Tableau i Pythona z certyfikatami + specjalistycznych webinarów z PowerBI.
Ekskluzywana ale pomagająca sobie społeczność.
Ponad 61 godzin materiałów video.
Spotkania LIVE co miesiąc.
Mój osobisty mentoring.