Serwisanci dostępni teraz · czynne całą dobę, także w weekendy i świętaWarszawa i okolice · dojazd bezpłatny
Darmowa diagnoza laptopa
Darmowa diagnoza laptopa
Dojazd do klienta bezpłatnie
Dojazd do klienta bezpłatnie
Laptopy zastępcze bezpłatnie
Laptopy zastępcze bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie

Funkcja daty i czasu

Termin Definicja
Funkcja daty i czasu

Funkcja daty i czasu to kategoria funkcji SQL wykonujących operacje na wartościach chronologicznych.

Do czego służą funkcje daty i czasu w SQL

Funkcje daty i czasu w SQL służą do odczytywania, przekształcania i porównywania wartości opisujących dzień, godzinę albo przedział czasowy. Ułatwiają wykonywanie operacji bezpośrednio w zapytaniu, na przykład wyznaczenie roku z daty zamówienia, sprawdzenie, czy rekord powstał w określonym miesiącu, obliczenie liczby dni między terminami albo zaokrąglenie znacznika czasu do dnia. Dzięki temu aplikacja nie musi pobierać wszystkich danych i wykonywać obliczeń osobno w kodzie programu.

W relacyjnych bazach danych wartości chronologiczne są przechowywane w typach przeznaczonych do określonych zastosowań. Typ DATE opisuje datę kalendarzową, typ TIME godzinę, a typ TIMESTAMP łączy datę z godziną. W zależności od implementacji dostępne są także typy uwzględniające strefę czasową oraz typy interwałowe, przechowujące długość okresu. Konkretne nazwy funkcji, składnia i zakres obsługiwanych typów zależą od silnika bazy danych, dlatego zapytanie należy sprawdzać w dokumentacji używanego systemu.

Odczytywanie części daty i czasu

Częstym zadaniem jest pobranie pojedynczego składnika wartości chronologicznej. Z daty można wyodrębnić rok, miesiąc i dzień, a z czasu godzinę, minutę i sekundę. Takie operacje wykorzystuje się przy grupowaniu danych według miesięcy, tworzeniu zestawień rocznych, filtrowaniu zdarzeń z określonej doby oraz budowaniu raportów okresowych. Jeżeli kolumna zawiera znacznik czasu, wydzielenie samej daty pozwala porównać dzień zdarzenia bez uwzględniania godziny.

W standardzie SQL do pobierania pól z wartości daty lub czasu stosuje się wyrażenie EXTRACT, którego składnia ma postać EXTRACT(field FROM source). Pole może oznaczać między innymi rok, miesiąc, dzień, godzinę, minutę lub sekundę, o ile dany typ źródłowy i konkretny silnik obsługują takie odwołanie. Wynik może mieć typ liczbowy, a dla sekund może zawierać część ułamkową. Przy projektowaniu zapytania trzeba też uwzględnić, że numer miesiąca wynosi od 1 do 12, natomiast zakres dni zależy od miesiąca i roku.

Dodawanie okresów, różnice i formatowanie

Funkcje daty i czasu pozwalają dodawać lub odejmować okresy od wartości chronologicznych. Przykładowo można wyznaczyć termin przypadający określoną liczbę dni po utworzeniu zgłoszenia albo obliczyć datę rozpoczęcia poprzedniego miesiąca. Nie każda jednostka zachowuje się jednak tak samo. Dodanie jednego dnia oznacza przesunięcie o dobę kalendarzową, natomiast dodanie miesiąca może prowadzić do problemu, gdy dzień początkowy nie występuje w miesiącu wynikowym, na przykład przy przejściu z daty końca miesiąca do krótszego miesiąca.

Różnicę między wartościami można wyrażać w dniach, godzinach lub innych jednostkach, ale sposób obliczenia zależy od funkcji udostępnionej przez silnik. Warto odróżnić różnicę kalendarzową od czasu trwania mierzonego w sekundach. Zmiana daty z 1 marca na 2 marca obejmuje jeden dzień kalendarzowy, lecz obliczenia związane ze strefami czasowymi mogą dać inną liczbę godzin. Formatowanie służy natomiast do przedstawienia daty jako tekstu, na przykład w formacie rok-miesiąc-dzień. Konwersja do tekstu powinna być wykonywana dopiero na etapie prezentacji, ponieważ wcześniejsze sformatowanie utrudnia sortowanie i dalsze obliczenia.

Strefy czasowe i poprawne użycie w zapytaniach

Znacznik czasu bez informacji o strefie nie wskazuje jednoznacznie chwili na osi czasu. Ta sama wartość, na przykład godzina 10:00, może oznaczać różne momenty w zależności od miejsca, w którym została zapisana lub odczytana. W systemach obsługujących użytkowników z wielu lokalizacji należy rozróżnić czas lokalny, czas UTC oraz czas przechowywany razem z przesunięciem strefowym. Szczególnej uwagi wymagają momenty zmiany czasu urzędowego, ponieważ niektóre godziny mogą wystąpić dwukrotnie, a inne mogą zostać pominięte.

Filtrowanie po dacie powinno uwzględniać typ kolumny i możliwość istnienia części czasowej. Dla zakresu obejmującego cały dzień bezpieczniejsze jest porównanie od początku wskazanego dnia do początku dnia następnego niż użycie wartości końcowej z ręcznie wpisaną godziną 23:59:59. Takie podejście obejmuje również ułamkowe sekundy i ogranicza błędy graniczne. Nie należy też stosować funkcji do kolumny w warunku filtrowania bez sprawdzenia wpływu na indeksy, ponieważ przekształcenie każdej wartości może uniemożliwić wydajne wyszukiwanie. Przy diagnostyce problemów z datami trzeba sprawdzić typ kolumny, ustawienia strefy, sposób konwersji oraz format danych wejściowych.

+48 22 100 48 29Zadzwoń teraz · serwisant w 1 godzinę