Ten artykuł zawiera przykłady konwersji smalldatetime wartość do datetime2 wartość w SQL Server.
smalldatetime typ danych nie ma żadnych ułamków sekund, a jego składnik sekund jest zawsze ustawiony na zero (:00). Jego dokładność jest do najbliższej minuty.
datetime2 z drugiej strony typ danych umożliwia określenie dokładności ułamka sekundy od 0 do 7. Jeśli nie określisz tego, użyje 7 (wartość domyślna). Jeśli podasz zero (0
), jego dokładność będzie z dokładnością do najbliższej sekundy.
Po przekonwertowaniu smalldatetime wartość datetime2 , kopiowane są godziny i minuty. Sekundy i ułamki sekund są ustawione na 0.
Przykład 1 – Konwersja niejawna
Oto przykład niejawnej konwersji między smalldatetime i datagodzina2 .
DECLARE @thesmalldatetime smalldatetime, @thedatetime2 datetime2; SET @thesmalldatetime = '2025-05-21 10:15:30'; SET @thedatetime2 = @thesmalldatetime; SELECT @thesmalldatetime AS 'smalldatetime', @thedatetime2 AS 'datetime2';
Wynik:
+---------------------+-----------------------------+ | smalldatetime | datetime2 | |---------------------+-----------------------------| | 2025-05-21 10:16:00 | 2025-05-21 10:16:00.0000000 | +---------------------+-----------------------------+
Jest to niejawna konwersja, ponieważ nie używamy funkcji konwersji (takich jak te poniżej) do jawnej konwersji. W takim przypadku SQL Server wykonuje niejawną konwersję za kulisami, gdy próbujemy przypisać smalldatetime wartość do datetime2 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ę.
W tym przypadku datetime2 wartość używa precyzji 7. Dzieje się tak, ponieważ 7 jest wartością domyślną. Nie określiłem precyzji i dlatego użyto wartości domyślnej. Powoduje to użycie 7 zer w części ułamkowej.
Przykład 2 – Usuń część ułamkową
W razie potrzeby możesz usunąć ułamki sekund. Aby to zrobić, po prostu użyj datetime2(0)
podczas deklarowania zmiennej.
DECLARE @thesmalldatetime smalldatetime, @thedatetime2 datetime2(0); SET @thesmalldatetime = '2025-05-21 10:15:30'; SET @thedatetime2 = @thesmalldatetime; SELECT @thesmalldatetime AS 'smalldatetime', @thedatetime2 AS 'datetime2';
Wynik:
+---------------------+---------------------+ | smalldatetime | datetime2 | |---------------------+---------------------| | 2025-05-21 10:16:00 | 2025-05-21 10:16:00 | +---------------------+---------------------+
W tym przypadku oba typy danych zwracają tę samą wartość. Różnica polega jednak na tym, że datetime2 ma możliwość zapewnienia dokładności co do sekundy (w porównaniu z smalldatetime dokładność co do minuty).
Przykład:
DECLARE @thesmalldatetime smalldatetime, @thedatetime2 datetime2(0); SET @thesmalldatetime = '2025-05-21 10:15:30'; SET @thedatetime2 = @thesmalldatetime; SELECT DATEADD(second, 30, @thesmalldatetime) AS 'smalldatetime', DATEADD(second, 30, @thedatetime2) AS 'datetime2';
Wynik:
+---------------------+---------------------+ | smalldatetime | datetime2 | |---------------------+---------------------| | 2025-05-21 10:17:00 | 2025-05-21 10:16:30 | +---------------------+---------------------+
W tym przykładzie użyłem DATEADD()
funkcja dodawania 30 sekund do każdej wartości. Jednak każdy typ danych zwraca inny wynik. datetime2 typ danych uwzględnia część sekundową i zapewnia poprawny wynik ze 100% dokładnością. smalldatetime z drugiej strony typ, jest zaokrąglany w górę do najbliższej minuty (podczas gdy część sekund pozostaje na zero).
Przykład 3 – Jawna konwersja za pomocą CAST()
Oto przykład jawnej konwersji. W tym przypadku używam CAST()
działać bezpośrednio w SELECT
oświadczenie o jawnej konwersji między smalldatetime i datagodzina2 .
DECLARE @thesmalldatetime smalldatetime; SET @thesmalldatetime = '2025-05-21 10:15:30'; SELECT @thesmalldatetime AS 'thesmalldatetime', CAST(@thesmalldatetime AS datetime2(0)) AS 'datetime2(0)';
Wynik:
+---------------------+---------------------+ | thesmalldatetime | datetime2(0) | |---------------------+---------------------| | 2025-05-21 10:16:00 | 2025-05-21 10:16:00 | +---------------------+---------------------+
Przykład 4 – Jawna konwersja przy użyciu funkcji CONVERT()
Oto przykład jawnej konwersji przy użyciu metody CONVERT()
funkcja zamiast CAST()
.
DECLARE @thesmalldatetime smalldatetime; SET @thesmalldatetime = '2025-05-21 10:15:30'; SELECT @thesmalldatetime AS 'thesmalldatetime', CONVERT(datetime2(0), @thesmalldatetime) AS 'datetime2(0)';
Wynik:
+---------------------+---------------------+ | thesmalldatetime | datetime2(0) | |---------------------+---------------------| | 2025-05-21 10:16:00 | 2025-05-21 10:16:00 | +---------------------+---------------------+