Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Примери за преобразуване на „smalldatetime“ в „datetime“ в SQL Server (T-SQL)

Тази статия съдържа примери за преобразуване на 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 стойност към дата и час променлива.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Използване на PIVOT в SQL Server 2008

  2. SQL Server IN срещу EXISTS производителност

  3. Как да направите изтриване на преминаваща заявка в SQL Server

  4. Как се прави GROUP BY, чувствителен към малки и големи букви?

  5. Не може да се намери нито колона dbo, нито дефинираната от потребителя функция, нито агрегат dbo.Splitfn, или името е двусмислено