Ten artykuł zawiera przykłady konwersji smalldatetime wartość do daty i godziny 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.
data i godzina z drugiej strony typ danych zawiera 3-cyfrową część ułamkową sekund, a jego dokładność jest zaokrąglana do przyrostów o 0,000, 0,003 lub 0,007 sekundy.
Po przekonwertowaniu smalldatetime wartość do data i godzina , smalldatetime wartość jest kopiowana do data i godzina wartość. Ułamki sekund są ustawione na 0.
W większości przypadków lepiej będzie przekonwertować na datetime2 typ danych zamiast data i godzina . W ten sposób zapewnisz większą dokładność przy użyciu tego samego rozmiaru pamięci. Jeśli jednak naprawdę potrzebujesz, to data i godzina , oto kilka przykładów.
Przykład 1 – Konwersja niejawna
Oto przykład niejawnej konwersji między smalldatetime i data i godzina .
DECLARE @thesmalldatetime smalldatetime, @thedatetime datetime; SET @thesmalldatetime = '2025-05-21 10:15:30'; SET @thedatetime = @thesmalldatetime; SELECT @thesmalldatetime AS 'smalldatetime', @thedatetime AS 'datetime';
Wynik:
+---------------------+-------------------------+ | smalldatetime | datetime | |---------------------+-------------------------| | 2025-05-21 10:16:00 | 2025-05-21 10:16:00.000 | +---------------------+-------------------------+
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 daty i godziny zmienna.
W tym przykładzie widzimy, że smalldatetime wartość nie zawiera ułamków sekund, sekundy zostały ustawione na zero, a minuta została zaokrąglona w górę od rzeczywistej wartości, którą próbowałem jej przypisać.
Jednak data i godzina wartość zawiera 3-cyfrową część ułamkową, która jest ustawiona na zero.
Przykład 2 – zmiana części ułamkowej
Mimo że część ułamkowa jest ustawiona na zero, po przekonwertowaniu wartości na data-godzina , możesz teraz zmienić część ułamkową (i drugą część, jeśli o to chodzi).
W tym przykładzie używam DATEADD()
funkcja do zmiany ułamków sekund datetime wartość.
DECLARE @thesmalldatetime smalldatetime, @thedatetime datetime; SET @thesmalldatetime = '2025-05-21 10:15:30'; SET @thedatetime = @thesmalldatetime; SELECT @thesmalldatetime AS 'smalldatetime', @thedatetime AS 'datetime', DATEADD(millisecond, 123, @thedatetime) AS 'datetime Modified';
Wynik (przy użyciu wyjścia pionowego):
smalldatetime | 2025-05-21 10:16:00 datetime | 2025-05-21 10:16:00.000 datetime Modified | 2025-05-21 10:16:00.123
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 data i godzina .
DECLARE @thesmalldatetime smalldatetime; SET @thesmalldatetime = '2025-05-21 10:15:30'; SELECT @thesmalldatetime AS 'thesmalldatetime', CAST(@thesmalldatetime AS datetime) AS 'datetime';
Wynik:
+---------------------+-------------------------+ | thesmalldatetime | datetime | |---------------------+-------------------------| | 2025-05-21 10:16:00 | 2025-05-21 10:16:00.000 | +---------------------+-------------------------+
Przykład 4 – Jawna konwersja przy użyciu funkcji CONVERT()
Oto przykład jawnej konwersji przy użyciu CONVERT()
funkcja zamiast CAST()
.
DECLARE @thesmalldatetime smalldatetime; SET @thesmalldatetime = '2025-05-21 10:15:30'; SELECT @thesmalldatetime AS 'thesmalldatetime', CONVERT(datetime, @thesmalldatetime) AS 'datetime';
Wynik:
+---------------------+-------------------------+ | thesmalldatetime | datetime | |---------------------+-------------------------| | 2025-05-21 10:16:00 | 2025-05-21 10:16:00.000 | +---------------------+-------------------------+
Jak wspomniano, rozważ konwersję na datetime2 typ danych zamiast data i godzina . Takie postępowanie zapewnia większą dokładność przy użyciu tego samego rozmiaru pamięci.