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

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

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

Когато конвертирате datetimeoffset стойност на datetime2 , датата и часът се копират в datetime2 стойност и часовата зона е съкратена. Частичните секунди също се съкращават, за да паснат, ако точността на дестинацията е по-ниска.

отместването на датата и времето типът данни ви позволява да зададете частична точност от секунди от 0 до 7 с помощта на datetimeoffset(n) синтаксис. Ако не посочите това, той ще използва 7 (по подразбиране). Има и изместване на часовата зона. Размерът за съхранение на този тип данни е 8, 9 или 10 байта, в зависимост от използваната прецизност.

datetime2 типът данни също ви позволява да зададете частична точност от секунди от 0 до 7 (с помощта на datetime2(n) синтаксис). Той няма информираност за часовата зона. Размерът му за съхранение е 6, 7 или 8, в зависимост от използваната прецизност.

Имайте предвид, че изброените тук количества за съхранение са количествата, изброени в документацията на Microsoft. Тези типове данни обаче също използват 1 байт за съхранение на точността. Затова добавете 1 байт към изброените тук количества за по-пълна картина на изискванията за съхранение.

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

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

ДЕКЛАРИРАЙТЕ @thedatetimeoffset datetimeoffset, @thedatetime2 datetime2;SET @thedatetimeoffset ='2025-05-21 10:15:30.1234567 +07:00';SET @thedatetime2 =@thedatetimeoffset;offset da SELECT @thedatimeoffset;offset да ИЗБРАТЕ КАТО' КАТО 'datetime2';

Резултат:

+----------------------------------+-------- --------------------+| datetimeoffset | datetime2 ||-----------------------------------+--------- -------------------|| 2025-05-21 10:15:30.1234567 +07:00 | 2025-05-21 10:15:30.1234567 |+------------------------------------+- ----------------------------+

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

В този пример и двата типа данни използват точността по подразбиране (7 знака след десетичната запетая). Следователно, дробната част беше 1234567 и за двата резултата.

Виждаме също, че изместването на часовата зона е съкратено – datetime2 типът данни няма информация за часовата зона.

При това преобразуване размерът на хранилището е намалял от 10 байта (за datetimeoffset ) до 8 байта (за datetime2 ), въпреки че имайте предвид, че се добавя 1 байт, за да се съхрани точността.

Пример 2 – Различна прецизност

Ето пример, който демонстрира какво се случва, ако datetime2 стойност използва по-ниска прецизност на datetimeoffset стойност.

DECLARE @thedatetimeoffset datetimeoffset(7), @thedatetime2 datetime2(3);SET @thedatetimeoffset ='2025-05-21 10:15:30.1234567 +07:00';SET @thedatetime2 =@thedatetime2 =@thedatetimeoffset;SET AS @thedatetimeoffset; 'datetimeoffset', @thedatetime2 AS 'datetime2';

Резултат:

+----------------------------------+-------- ----------------+| datetimeoffset | datetime2 ||-----------------------------------+--------- ---------------|| 2025-05-21 10:15:30.1234567 +07:00 | 2025-05-21 10:15:30.123 |+------------------------------------+- ------------------------+

В този пример datetimeoffset има скала от 7 но datetime2 стойност има мащаб само от 3 . Следователно частичните секунди бяха съкратени, за да паснат.

Имайте предвид, че това може да доведе до закръгляване. Ето пример, където дробната част на datetime2 стойността се закръглява до 124 .

DECLARE @thedatetimeoffset datetimeoffset(7), @thedatetime2 datetime2(3);SET @thedatetimeoffset ='2025-05-21 10:15:30.1235555 +07:00';SET @thedatetime2 =@thedatetime2 =@thedatetimeoffset; 'datetimeoffset', @thedatetime2 AS 'datetime2';

Резултат:

+----------------------------------+-------- ----------------+| datetimeoffset | datetime2 ||-----------------------------------+--------- ---------------|| 2025-05-21 10:15:30.1234567 +07:00 | 2025-05-21 10:15:30.124 |+------------------------------------+- ------------------------+

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

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

DECLARE @thedatetimeoffset datetimeoffset;SET @thedatetimeoffset ='2025-05-21 10:15:30.1234567 +07:00';SELECT @thedatetimeoffset КАТО 'datetimeoffset', CAST(@thedatetimeoffset) AS' date;' /предварително> 

Резултат:

+----------------------------------+-------- --------------------+| datetimeoffset | datetime2 ||-----------------------------------+--------- -------------------|| 2025-05-21 10:15:30.1234567 +07:00 | 2025-05-21 10:15:30.1234567 |+------------------------------------+- ----------------------------+

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

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

DECLARE @thedatetimeoffset datetimeoffset;SET @thedatetimeoffset ='2025-05-21 10:15:30.1234567 +07:00';ИЗБЕРЕТЕ @thedatetimeoffset КАТО 'datetimeoffset', CONVERT(datetime2,offset 

Резултат:

+----------------------------------+--------- --------------------+| datetimeoffset | datetime2 ||-----------------------------------+--------- -------------------|| 2025-05-21 10:15:30.1234567 +07:00 | 2025-05-21 10:15:30.1234567 |+------------------------------------+- ----------------------------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SCOPE_IDENTITY() за GUID?

  2. Как да използвате RANK() в SQL Server

  3. ADO.net SqlTransaction подобрява производителността

  4. Защо SQL Server използва индексно сканиране вместо търсене на индекс, когато клаузата WHERE съдържа параметризирани стойности

  5. Въведение във вградените функции с таблично стойности (ITVF) в SQL Server