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

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

Тази статия съдържа примери за преобразуване на smalldatetime стойност до datetime2 стойност в SQL Server.

Smalldatetime типът данни няма частни секунди и неговият компонент за секунди винаги е настроен на нула (:00). Неговата точност е до най-близката минута.

datetime2 тип данни, от друга страна, ви позволява да зададете частична точност от секунди от 0 до 7. Ако не посочите това, той ще използва 7 (по подразбиране). Ако посочите нула (0 ), точността му ще бъде до най-близката секунда.

Когато конвертирате smalldatetime стойност на datetime2 , часовете и минутите се копират. Секундите и частичните секунди са зададени на 0.

Пример 1 – Неявно преобразуване

Ето пример за имплицитно преобразуване между smalldatetime и дата и час2 .

DECLARE 
  @thesmalldatetime smalldatetime,
  @thedatetime2 datetime2;
SET @thesmalldatetime = '2025-05-21 10:15:30';
SET @thedatetime2 = @thesmalldatetime;
SELECT 
  @thesmalldatetime AS 'smalldatetime',
  @thedatetime2 AS 'datetime2';

Резултат:

+---------------------+-----------------------------+
| smalldatetime       | datetime2                   |
|---------------------+-----------------------------|
| 2025-05-21 10:16:00 | 2025-05-21 10:16:00.0000000 |
+---------------------+-----------------------------+

Това е имплицитно преобразуване, защото не използваме функция за преобразуване (като тези по-долу), за да я преобразуваме изрично. В този случай SQL Server изпълнява неявно преобразуване зад кулисите, когато се опитваме да присвоим smalldatetime стойност до datetime2 променлива.

В този пример можем да видим, че smalldatetime стойността не включва дробните секунди, секундите са зададени на нула, а минутата е закръглена нагоре.

В този случай datetime2 value използва точност от 7. Това е така, защото 7 е стойността по подразбиране. Не посочих точност и затова беше използвана стойността по подразбиране. Това води до използване на 7 нули в дробната част.

Пример 2 – Премахване на дробната част

Можете да премахнете частичните секунди, ако е необходимо. За да направите това, просто използвайте datetime2(0) при деклариране на променливата.

DECLARE 
  @thesmalldatetime smalldatetime,
  @thedatetime2 datetime2(0);
SET @thesmalldatetime = '2025-05-21 10:15:30';
SET @thedatetime2 = @thesmalldatetime;
SELECT 
  @thesmalldatetime AS 'smalldatetime',
  @thedatetime2 AS 'datetime2';

Резултат:

+---------------------+---------------------+
| smalldatetime       | datetime2           |
|---------------------+---------------------|
| 2025-05-21 10:16:00 | 2025-05-21 10:16:00 |
+---------------------+---------------------+

Така че в този случай и двата типа данни връщат една и съща стойност. Разликата обаче е, че datetime2 има способността да предоставя точност на втория (в сравнение с smalldatetime точност до минута).

Пример:

DECLARE 
  @thesmalldatetime smalldatetime,
  @thedatetime2 datetime2(0);
SET @thesmalldatetime = '2025-05-21 10:15:30';
SET @thedatetime2 = @thesmalldatetime;
SELECT 
  DATEADD(second, 30, @thesmalldatetime) AS 'smalldatetime',
  DATEADD(second, 30, @thedatetime2) AS 'datetime2';

Резултат:

+---------------------+---------------------+
| smalldatetime       | datetime2           |
|---------------------+---------------------|
| 2025-05-21 10:17:00 | 2025-05-21 10:16:30 |
+---------------------+---------------------+

В този пример използвах DATEADD() функция за добавяне на 30 секунди към всяка стойност. Въпреки това, всеки тип данни връща различен резултат. datetime2 типът данни зачита секундната част и осигурява правилния резултат със 100% точност. Smalldatetime от друга страна, се закръглява нагоре до най-близката минута (докато частта от секундите остава на нула).

Пример 3 – Изрично преобразуване с помощта на CAST()

Ето пример за изрично преобразуване. В този случай използвам CAST() функция директно в SELECT изявление за изрично преобразуване между smalldatetime и дата и час2 .

DECLARE @thesmalldatetime smalldatetime;
SET @thesmalldatetime = '2025-05-21 10:15:30';
SELECT 
  @thesmalldatetime AS 'thesmalldatetime',
  CAST(@thesmalldatetime AS datetime2(0)) AS 'datetime2(0)';

Резултат:

+---------------------+---------------------+
| thesmalldatetime    | datetime2(0)        |
|---------------------+---------------------|
| 2025-05-21 10:16:00 | 2025-05-21 10:16:00 |
+---------------------+---------------------+

Пример 4 – Изрично преобразуване с помощта на CONVERT()

Ето пример за изрично преобразуване с помощта на CONVERT() функция вместо CAST() .

DECLARE @thesmalldatetime smalldatetime;
SET @thesmalldatetime = '2025-05-21 10:15:30';
SELECT 
  @thesmalldatetime AS 'thesmalldatetime',
  CONVERT(datetime2(0), @thesmalldatetime) AS 'datetime2(0)';

Резултат:

+---------------------+---------------------+
| thesmalldatetime    | datetime2(0)        |
|---------------------+---------------------|
| 2025-05-21 10:16:00 | 2025-05-21 10:16:00 |
+---------------------+---------------------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Създайте функция с таблично стойности с множество оператори (MSTVF) в SQL Server

  2. SQL Server 2008 разделител на хиляди за колона

  3. TIMEFROMPARTS() Примери в SQL Server (T-SQL)

  4. Състояние UNION ALL спрямо OR в заявка за sql сървър

  5. SQL Server:Заявка бързо, но бавно от процедура