Тази статия съдържа примери за преобразуване на smalldatetime стойност към дата и час стойност в SQL Server.
Когато конвертирате smalldatetime стойност до дата и час , часовете и минутите се копират, а секундите и частичните секунди са зададени на 0
.
Пример 1 – Изрично преобразуване с помощта на CAST()
Ето пример за изрично преобразуване. В този случай използвам CAST()
функция директно в SELECT
изявление за изрично преобразуване от smalldatetime до дата и час .
ДЕКЛАРИРАНЕ @thesmalldatetime smalldatetimeSET @thesmalldatetime ='2031-03-25 11:15:29'SELECT @thesmalldatetime КАТО 'thesmalldatetime', CAST(@thesmalldatetime AS datetime) КАТО 'datetime';>Резултат:
+---------------------+----------------------- -+| thesmalldatetime | дата и час ||---------------------+--------------------- || 25.03.2031 11:15:00 | 2031-03-25 11:15:00,000 |+---------------------+---------------- ---------+Първо, можем да видим, че thesmalldatetime стойността използва
00
за компонента секунди, въпреки че изрично го зададохме на29
. Това е така, защото когато използвате thesmalldatetime тип данни, секундите винаги са нула (и без дробни секунди).Следователно, когато преобразуваме стойността в datetime , стойността на секундите (и частичните секунди) са настроени на нула. Ако току-що бяхме присвоили оригиналната стойност на datetime на първо място, секундите биха останали непокътнати:
ДЕКЛАРИРАЙТЕ @thedatetime datetimeSET @thedatetime ='2031-03-25 11:15:29'ИЗБЕРЕТЕ @thedatetime КАТО 'thedatetime';Резултат:
+------------------------+| датата и часа ||-----------------------|| 2031-03-25 11:15:29 000 |+-------------------------+Не само секундите ще останат непокътнати, но и всички частични секунди биха останали непокътнати (но само до скала от 3):
DECLARE @thedatetime datetimeSET @thedatetime ='2031-03-25 11:15:29.123'SELECT @thedatetime КАТО 'thedatetime';Резултат:
+------------------------+| датата и часа ||-----------------------|| 2031-03-25 11:15:29.123 |+-------------------------+Пример 2 – Закръгляване
Ето какво се случва, ако зададем на компонента секунди по-висока стойност, преди да го присвоим на smalldatetime тип данни.
ДЕКЛАРИРАНЕ @thesmalldatetime smalldatetimeSET @thesmalldatetime ='2031-03-25 11:15:31'SELECT @thesmalldatetime КАТО 'thesmalldatetime', CAST(@thesmalldatetime КАТО дата и време) КАТО 'datetime';>Резултат:
+---------------------+----------------------- -+| thesmalldatetime | дата и час ||---------------------+--------------------- || 25.03.2031 11:16:00 | 2031-03-25 11:16:00,000 |+---------------------+---------------- ---------+Така че компонентът за минутите вече се закръгля до следващата минута.
Пример 3 – Изрично преобразуване с помощта на CONVERT()
Това е същото като първия пример, с изключение на това, че този път използвам
CONVERT()
функция вместоCAST()
.DECLARE @thesmalldatetime smalldatetimeSET @thesmalldatetime ='2031-03-25 11:15:29'SELECT @thesmalldatetime КАТО 'thesmalldatetime', CONVERT(datetime, @thesmalldatetime) КАТО 'datetime'; Резултат:+---------------------+----------------------- -+| thesmalldatetime | дата и час ||---------------------+--------------------- || 25.03.2031 11:15:00 | 2031-03-25 11:15:00,000 |+---------------------+---------------- ---------+Пример 4 – Неявно преобразуване
Ето пример за правене на същото нещо, но с помощта на имплицитно преобразуване на тип.
ДЕКЛАРИРАЙТЕ @thesmalldatetime smalldatetime, @thedatetime datetimeSET @thesmalldatetime ='2031-03-25 11:15:29'SET @thedatetime =@thesmalldatetime SELECT @thesmalldatetime AS 'thesmalldatetime', AS 'thesmalldatetime';'>Резултат:
+---------------------+----------------------- -+| thesmalldatetime | дата и час ||---------------------+--------------------- || 25.03.2031 11:15:00 | 2031-03-25 11:15:00,000 |+---------------------+---------------- ---------+Така че получаваме един и същ резултат, независимо дали е изрично или неявно преобразуване.
Това е имплицитно преобразуване, защото не използваме функция за преобразуване, за да я преобразуваме изрично. Ние просто присвояваме стойността от променлива от един тип данни на променлива от друг тип данни. В този случай SQL Server изпълнява неявно преобразуване зад кулисите, когато се опитваме да присвоим smalldatetime стойност към дата и час променлива.