Ten artykuł zawiera przykłady konwersji daty/godziny wartość do smalldatetime wartość w SQL Server.
Jedna z zalet konwersji daty/godziny wartość smalldatetime polega na zmniejszeniu rozmiaru pamięci z 8 bajtów do 4 bajtów. Jednak tracisz przy tym precyzję.
data i godzina typ danych zawiera 3-cyfrową część ułamkową sekund. Jego dokładność jest zaokrąglana z dokładnością do 0,000, 0,003 lub 0,007 sekundy.
smalldatetime z drugiej strony typ danych nie ma żadnych ułamków sekund, a jego składnik sekund jest zawsze ustawiony na zero (:00). Ponadto ma dokładność tylko do najbliższej minuty.
Po przekonwertowaniu daty/godziny wartość smalldatetime , kopiowana jest data i część czasu. Składnik sekund jest ustawiony na zero (niezależnie od pierwotnej wartości), a czas jest zaokrąglany do najbliższej minuty. Wszelkie ułamki sekund są usuwane.
Przykład 1 – Konwersja niejawna
Oto przykład niejawnej konwersji między data godzina i smalldatetime .
DECLARE @thedatetime datetime, @thesmalldatetime smalldatetime; SET @thedatetime = '2025-05-21 10:15:30.123'; SET @thesmalldatetime = @thedatetime; SELECT @thedatetime AS 'datetime', @thesmalldatetime AS 'smalldatetime';
Wynik:
+-------------------------+---------------------+ | datetime | smalldatetime | |-------------------------+---------------------| | 2025-05-21 10:15:30.123 | 2025-05-21 10:16:00 | +-------------------------+---------------------+
Jest to niejawna konwersja, ponieważ nie używamy funkcji konwersji (takich jak te poniżej) do jawnej konwersji. W tym przypadku SQL Server wykonuje niejawną konwersję za kulisami, gdy próbujemy przypisać datetime wartość do smalldatetime zmienna.
W tym przykładzie widzimy, że smalldatetime wartość nie obejmuje ułamków sekund, sekundy zostały ustawione na zero, a minuty zostały zaokrąglone w górę.
Przykład 2 – Jawna konwersja za pomocą CAST()
Oto przykład jawnej konwersji. W tym przypadku używam CAST()
działać bezpośrednio w SELECT
oświadczenie, aby jawnie przekonwertować między data godzina i smalldatetime .
DECLARE @thedatetime datetime; SET @thedatetime = '2025-05-21 10:15:30.125'; SELECT @thedatetime AS 'datetime', CAST(@thedatetime AS smalldatetime) AS 'smalldatetime';
Wynik:
+-------------------------+---------------------+ | datetime | smalldatetime | |-------------------------+---------------------| | 2025-05-21 10:15:30.127 | 2025-05-21 10:16:00 | +-------------------------+---------------------+
Być może zauważyłeś, że w tym przykładzie zmieniłem ułamki sekund podczas przypisywania wartości początkowej do @thedatetime
. Ale ponieważ przypisuję go do daty i godziny typ danych, część ułamków sekund jest zaokrąglana w górę (ponieważ jej dokładność jest zaokrąglana z dokładnością do 0,000, 0,003 lub 0,007 sekundy). W tym przypadku próbuję przypisać ułamek sekundy z 125
ale jest zaokrąglana w górę do 127
.
Nie ma to jednak wpływu na smalldatetime wartość.
Przykład 3 – Jawna konwersja przy użyciu funkcji CONVERT()
Oto przykład jawnej konwersji przy użyciu CONVERT()
funkcja zamiast CAST()
.
DECLARE @thedatetime datetime; SET @thedatetime = '2025-05-21 10:15:30.125'; SELECT @thedatetime AS 'datetime', CONVERT(smalldatetime, @thedatetime) AS 'smalldatetime';
Wynik:
+-------------------------+---------------------+ | datetime | smalldatetime | |-------------------------+---------------------| | 2025-05-21 10:15:30.127 | 2025-05-21 10:16:00 | +-------------------------+---------------------+