Ten artykuł zawiera przykłady konwersji smalldatetime wartość do daty i godziny wartość w SQL Server.
Po przekonwertowaniu smalldatetime wartość do data i godzina , godziny i minuty są kopiowane, a sekundy i ułamki sekund są ustawiane na 0
.
Przykład 1 – 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 z smalldatetime do data/godzina .
DECLARE @thesmalldatetime smalldatetime SET @thesmalldatetime = '2031-03-25 11:15:29' SELECT @thesmalldatetime AS 'thesmalldatetime', CAST(@thesmalldatetime AS datetime) AS 'datetime';
Wynik:
+---------------------+-------------------------+ | thesmalldatetime | datetime | |---------------------+-------------------------| | 2031-03-25 11:15:00 | 2031-03-25 11:15:00.000 | +---------------------+-------------------------+
Po pierwsze, widzimy, że thesmalldatetime wartość używa 00
dla składnika sekund, mimo że jawnie ustawiliśmy go na 29
. Dzieje się tak, ponieważ podczas korzystania z thesmalldatetime typ danych, sekundy są zawsze równe zero (i bez ułamków sekund).
Dlatego, gdy konwertujemy wartość na data-godzina , wartość sekund (i ułamki sekund) jest ustawiona na zero. Gdybyśmy właśnie przypisali oryginalną wartość do datetime po pierwsze, sekundy pozostałyby nienaruszone:
DECLARE @thedatetime datetime SET @thedatetime = '2031-03-25 11:15:29' SELECT @thedatetime AS 'thedatetime';
Wynik:
+-------------------------+ | thedatetime | |-------------------------| | 2031-03-25 11:15:29.000 | +-------------------------+
Nie tylko sekundy pozostałyby nienaruszone, ale także wszystkie ułamki sekund pozostałyby nienaruszone (ale tylko do skali 3):
DECLARE @thedatetime datetime SET @thedatetime = '2031-03-25 11:15:29.123' SELECT @thedatetime AS 'thedatetime';
Wynik:
+-------------------------+ | thedatetime | |-------------------------| | 2031-03-25 11:15:29.123 | +-------------------------+
Przykład 2 – Zaokrąglanie
Oto, co się stanie, jeśli ustawimy składnik sekund na wyższą wartość przed przypisaniem go do smalldatetime typ danych.
DECLARE @thesmalldatetime smalldatetime SET @thesmalldatetime = '2031-03-25 11:15:31' SELECT @thesmalldatetime AS 'thesmalldatetime', CAST(@thesmalldatetime AS datetime) AS 'datetime';
Wynik:
+---------------------+-------------------------+ | thesmalldatetime | datetime | |---------------------+-------------------------| | 2031-03-25 11:16:00 | 2031-03-25 11:16:00.000 | +---------------------+-------------------------+
Tak więc składnik minut jest teraz zaokrąglany w górę do następnej minuty.
Przykład 3 – Jawna konwersja przy użyciu funkcji CONVERT()
To jest to samo, co w pierwszym przykładzie, z tą różnicą, że tym razem używam metody CONVERT()
funkcja zamiast CAST()
.
DECLARE @thesmalldatetime smalldatetime SET @thesmalldatetime = '2031-03-25 11:15:29' SELECT @thesmalldatetime AS 'thesmalldatetime', CONVERT(datetime, @thesmalldatetime) AS 'datetime';
Wynik:
+---------------------+-------------------------+ | thesmalldatetime | datetime | |---------------------+-------------------------| | 2031-03-25 11:15:00 | 2031-03-25 11:15:00.000 | +---------------------+-------------------------+
Przykład 4 – Konwersja niejawna
Oto przykład zrobienia tego samego, ale przy użyciu niejawnej konwersji typu.
DECLARE @thesmalldatetime smalldatetime, @thedatetime datetime SET @thesmalldatetime = '2031-03-25 11:15:29' SET @thedatetime = @thesmalldatetime SELECT @thesmalldatetime AS 'thesmalldatetime', @thedatetime AS 'datetime';
Wynik:
+---------------------+-------------------------+ | thesmalldatetime | datetime | |---------------------+-------------------------| | 2031-03-25 11:15:00 | 2031-03-25 11:15:00.000 | +---------------------+-------------------------+
Tak więc otrzymujemy ten sam wynik, niezależnie od tego, czy jest to konwersja jawna czy niejawna.
Jest to niejawna konwersja, ponieważ nie używamy funkcji konwersji do jawnej konwersji. Po prostu przypisujemy wartość ze zmiennej jednego typu danych do zmiennej o innym typie danych. W takim przypadku SQL Server wykonuje niejawną konwersję za kulisami, gdy próbujemy przypisać smalldatetime wartość na data i godzina zmienna.