Тази статия съдържа примери за преобразуване на smalldatetime стойност към дата и час стойност в SQL Server.
Smalldatetime типът данни няма частни секунди и неговият компонент за секунди винаги е настроен на нула (:00). Неговата точност е до най-близката минута.
Дата и час тип данни, от друга страна, включва част от 3-цифрени дробни секунди и точността му се закръглява до стъпки от .000, .003 или .007 секунди.
Когато конвертирате smalldatetime стойност до дата и час , малката дата стойността се копира в datetime стойност. Частичните секунди са зададени на 0.
В повечето случаи е по-добре да конвертирате в datetime2 тип данни вместо datetime . Правейки това ще осигурите повишена точност, като същевременно използвате същия размер за съхранение. Въпреки това, ако наистина трябва да е datetime , ето няколко примера.
Пример 1 – Неявно преобразуване
Ето пример за имплицитно преобразуване между smalldatetime и дата и час .
DECLARE @thesmalldatetime smalldatetime, @thedatetime datetime;SET @thesmalldatetime ='2025-05-21 10:15:30';SET @thedatetime =@thesmalldatetime;SELECT @thesmalldatetime КАТО 'smalldatetime' КАТО 'smalldatetime';
Резултат:
+---------------------+----------------------- -+| smalldatetime | дата и час ||---------------------+--------------------- || 21.05.2025 10:16:00 | 2025-05-21 10:16:00,000 |+---------------------+---------------- ---------+
Това е имплицитно преобразуване, защото не използваме функция за преобразуване (като тези по-долу), за да я преобразуваме изрично. В този случай SQL Server изпълнява неявно преобразуване зад кулисите, когато се опитваме да присвоим smalldatetime стойност към дата и час променлива.
В този пример можем да видим, че smalldatetime стойността не включва частичните секунди, секундите са зададени на нула, а минутата е закръглена от действителната стойност, която се опитах да й присвоя.
Въпреки това, datetime стойност включва 3-цифрена дробна част, която е настроена на нула.
Пример 2 – Промяна на дробната част
Въпреки че дробната част е настроена на нула, след като преобразувате стойността в datetime , вече можете да промените дробната част (и частта за секундите в този смисъл).
В този пример използвам DATEADD()
функция за промяна на частичните секунди от datetime стойност.
DECLARE @thesmalldatetime smalldatetime, @thedatetime datetime;SET @thesmalldatetime ='2025-05-21 10:15:30';SET @thedatetime =@thesmalldatetime;SELECT @thesmalldatetime КАТО 'smalldatetime' КАТО 'smalldatetime' , DATEADD(милисекунда, 123, @thedatetime) КАТО 'datetime Modified';
Резултат (с помощта на вертикален изход):
smalldatetime | 2025-05-21 10:16:00datetime | 2025-05-21 10:16:00.000datetime Променено | 21.05.2025 10:16:00.123
Пример 3 – Изрично преобразуване с помощта на CAST()
Ето пример за изрично преобразуване. В този случай използвам CAST()
функция директно в SELECT
изявление за изрично преобразуване между smalldatetime и дата и час .
DECLARE @thesmalldatetime smalldatetime;SET @thesmalldatetime ='2025-05-21 10:15:30';ИЗБЕРЕТЕ @thesmalldatetime КАТО 'thesmalldatetime', CAST(@thesmalldatetime КАТО datetime) КАТО 'datetime'; Резултат:+---------------------+----------------------- -+| thesmalldatetime | дата и час ||---------------------+--------------------- || 21.05.2025 10:16:00 | 2025-05-21 10:16:00,000 |+---------------------+---------------- ---------+Пример 4 – Изрично преобразуване с помощта на CONVERT()
Ето пример за изрично преобразуване с помощта на
CONVERT()
функция вместоCAST()
.DECLARE @thesmalldatetime smalldatetime;SET @thesmalldatetime ='2025-05-21 10:15:30';SELECT @thesmalldatetime AS 'thesmalldatetime', CONVERT(datetime, @thesmalldatetime) AS;Резултат:
+---------------------+----------------------- -+| thesmalldatetime | дата и час ||---------------------+--------------------- || 21.05.2025 10:16:00 | 2025-05-21 10:16:00,000 |+---------------------+---------------- ---------+Както споменахме, помислете за конвертиране в datetime2 тип данни вместо datetime . Това осигурява повишена точност, като същевременно се използва същият размер за съхранение.