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

SMALLDATETIME

Termin Definicja
SMALLDATETIME

SMALLDATETIME to typ danych przechowujący datę i czas z dokładnością do minuty, w węższym zakresie niż DATETIME.

Zakres wartości i sposób przechowywania SMALLDATETIME

SMALLDATETIME jest typem danych dostępnym w Microsoft SQL Server. Przechowuje jednocześnie część daty oraz godzinę, ale jego rozdzielczość kończy się na pełnej minucie. Zakres wartości obejmuje daty od 1 stycznia 1900 roku do 6 czerwca 2079 roku. Ograniczenie zakresu wynika z wewnętrznego sposobu kodowania daty i oznacza, że typ ten nie nadaje się do przechowywania dat wcześniejszych ani późniejszych. Próba zapisania wartości poza zakresem prowadzi do błędu konwersji albo przepełnienia, zależnie od użytego wyrażenia i kontekstu instrukcji.

Wartość SMALLDATETIME zajmuje 4 bajty. Wewnętrznie SQL Server wykorzystuje dwie dwubajtowe części: jedną do przechowania liczby dni od daty bazowej 1900-01-01, a drugą do zapisania liczby minut od północy. Typ nie przechowuje informacji o strefie czasowej, przesunięciu UTC ani nazwie lokalnej strefy. Nie zawiera także sekund i ułamków sekund jako samodzielnych elementów wartości.

Zaokrąglanie sekund podczas konwersji

Najważniejszą cechą SMALLDATETIME jest automatyczna redukcja dokładności przy konwersji z typu zawierającego sekundy. Po zapisaniu wartości sekundy są zawsze prezentowane jako 00. Jeżeli część sekundowa źródłowej wartości mieści się w zakresie od 00 do 29,998 sekundy, minuta pozostaje bez zmiany. Jeżeli wartość sekund osiąga 29,999 lub więcej, SQL Server zaokrągla czas do następnej pełnej minuty. W praktyce zapis godziny 12:15:29 nie zmieni minuty, natomiast 12:15:30 zostanie zapisane jako 12:16:00.

Zaokrąglenie może zmienić również dzień. Wartość znajdująca się pod koniec doby, na przykład 23:59:30, po konwersji staje się wartością odpowiadającą północy następnego dnia. Z tego powodu porównywanie danych po konwersji nie powinno zakładać, że data kalendarzowa zawsze pozostanie identyczna. Jeżeli aplikacja otrzymuje czas z dokładnością do sekund lub milisekund, zapisanie go w kolumnie SMALLDATETIME może spowodować utratę informacji, a w granicznym przypadku także przesunięcie daty.

Konwersje, porównania i dobór typu kolumny

SMALLDATETIME może być używany w kolumnach tabel, zmiennych, parametrach procedur oraz wyrażeniach języka T-SQL. Wartości można jawnie konwertować za pomocą CAST lub CONVERT, na przykład z typów date, datetime albo datetime2. Konwersja z samego typu date ustawia czas na północ. Konwersja w odwrotnym kierunku, do date, usuwa część godzinową, ponieważ typ date przechowuje wyłącznie dzień kalendarzowy.

Podczas porównań SQL Server może wykonać niejawną konwersję typów zgodnie z regułami pierwszeństwa typów danych. Ma to znaczenie, gdy SMALLDATETIME jest porównywany z wartością datetime lub datetime2. Wartość o większej precyzji może zostać sprowadzona do minut albo wartość SMALLDATETIME może zostać rozszerzona do typu użytego w wyrażeniu. Filtr obejmujący określony przedział czasu powinien uwzględniać tę utratę precyzji. Warunek wyszukujący zdarzenia z jednej minuty może być poprawny dla SMALLDATETIME, ale nie będzie równoważny filtrowaniu danych zapisanych z dokładnością do milisekund.

Dobór SMALLDATETIME ma sens wtedy, gdy zakres dat oraz dokładność jednej minuty odpowiadają rzeczywistemu modelowi danych, na przykład przy zapisie harmonogramów lub zdarzeń raportowanych minutowo. Jeżeli wymagane są sekundy, milisekundy, daty poza zakresem 1900–2079 albo obsługa czasu UTC z przesunięciem, należy użyć innego typu dostępnego w SQL Server. datetime2 pozwala przechowywać większy zakres i wyższą precyzję, natomiast datetimeoffset dodatkowo przechowuje przesunięcie względem UTC.

Rozpoznawanie problemów z danymi czasowymi

Objawem nieprawidłowego doboru SMALLDATETIME może być powtarzanie się wielu rekordów z tą samą minutą, znikanie sekund po zapisie albo różnica jednej minuty widoczna po odczycie danych. Przy analizie należy sprawdzić definicję kolumny w tabeli, typ parametrów procedur i funkcje używane podczas importu. Szczególnej uwagi wymagają wartości generowane przez funkcje zwracające dokładniejszy typ, takie jak SYSDATETIME(), oraz dane przesyłane przez aplikację jako tekst. Sam format tekstu nie gwarantuje zachowania precyzji po konwersji do SMALLDATETIME.

W diagnostyce warto porównać wartość źródłową z wartością odczytaną po zapisie, sprawdzić sekundy przed konwersją oraz zweryfikować rekordy znajdujące się przy granicy północy. Należy także przeanalizować zakres dat w danych i upewnić się, że nie występują wartości wymagające roku wcześniejszego niż 1900 albo późniejszego niż 2079. Warszawskie Pogotowie Komputerowe wykonuje profesjonalną naprawę laptopów, komputerów PC i podzespołów, a analiza problemów z aplikacją korzystającą z SQL Server powinna obejmować zarówno konfigurację programu, jak i rzeczywiste typy oraz wartości zapisane w bazie.

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