| Termin | Definicja |
|---|---|
| Funkcja GETDATE | Funkcja GETDATE zwraca bieżącą datę i czas systemowy serwera. Do czego służy funkcja GETDATEGETDATE należy do dialektu Transact-SQL używanego w Microsoft SQL Server i zwraca znacznik czasu odczytany z zegara komputera, na którym pracuje instancja bazy danych. Zwracana wartość ma typ datetime i obejmuje datę razem z godziną, minutą, sekundą i ułamkiem sekundy. Istotne jest, że jest to czas serwera, a nie stacji roboczej użytkownika — jeśli aplikacja działa w Warszawie, a baza stoi na maszynie ustawionej na inną strefę, zapisane daty będą się rozjeżdżać z oczekiwaniami. Typowe zastosowania i funkcje pokrewneNajczęściej używa się jej jako wartości domyślnej kolumny rejestrującej moment utworzenia wiersza, w warunkach filtrujących rekordy z ostatnich dni oraz w zapytaniach wyliczających różnice czasu razem z funkcją DATEDIFF. W tym samym silniku dostępne są warianty o innym zachowaniu: GETUTCDATE zwraca czas uniwersalny, SYSDATETIME oddaje wynik w typie datetime2 o wyższej dokładności, a SYSDATETIMEOFFSET dokłada informację o przesunięciu strefy. W innych systemach odpowiedniki nazywają się inaczej — w MySQL jest to NOW, w PostgreSQL między innymi current_timestamp — dlatego przenoszenie zapytań między silnikami wymaga podmiany tych wywołań. Na czym najczęściej wykłada się to rozwiązaniePierwsza pułapka to precyzja: typ datetime nie przechowuje dowolnie drobnych ułamków sekundy, więc dwa zapisy wykonane niemal jednocześnie mogą otrzymać identyczny znacznik, co psuje sortowanie po czasie. Druga to porównywanie kolumny daty z wynikiem GETDATE bez odcięcia części godzinowej — warunek na równość praktycznie nigdy nie zadziała, bo godzina niemal na pewno się różni. Trzecia to zmiana czasu na letni i zimowy, przez którą zapisy oparte na czasie lokalnym tworzą godzinę powtórzoną i godzinę nieistniejącą; przy danych rozliczeniowych bezpieczniej jest przechowywać czas uniwersalny. Osobnym źródłem chaosu jest rozjechany zegar systemowy serwera, na przykład po wyczerpaniu baterii podtrzymującej na płycie głównej. Kiedy warto zajrzeć do sprzętu, a nie do zapytaniaJeśli daty w bazie są niedorzeczne albo cofają się po każdym restarcie, problem zwykle nie leży w kodzie, lecz w komputerze pełniącym rolę serwera. Warszawskie Pogotowie Komputerowe diagnozuje takie maszyny u klientów firmowych — wymieniamy baterię płyty głównej, sprawdzamy synchronizację czasu, kondycję dysków i stabilność zasilania. Działamy przez całą dobę, siedem dni w tygodniu, bo serwer bazy danych rzadko da się wyłączyć w godzinach pracy. |