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

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

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

Когато конвертирате datetimeoffset стойност на smalldatetime , датата и часовете се копират. Минутите се закръгляват нагоре (в зависимост от стойността на секундите) и секундите са зададени на 0.

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

Smalldatetime тип данни, от друга страна, няма информация за часовата зона и следователно не включва изместване на часовата зона. Той също така няма частни секунди и неговият компонент за секунди винаги е настроен на нула (:00). Неговата точност е до най-близката минута. Размерът за съхранение на този тип данни е фиксиран на 4 байта.

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

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

DECLARE @thedatetimeoffset datetimeoffset, @thesmalldatetime smalldatetime;SET @thedatetimeoffset ='2025-05-21 10:15:30.1234567 +07:00';SET @thesmalldatetime =@thesmalldatetime =@thesmalldatetime =@thesmalldatetime @thesmalldatetime smalldatetime; AS 'smalldatetime';

Резултат:

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

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

Виждаме, че smalldatetime променливата няма точност на дробни секунди и нейните секунди са настроени на нула. Освен това минутите бяха закръглени нагоре, поради факта, че първоначалната стойност имаше стойност за секунди от 30.

Друго наблюдение е, че изместването на часовата зона е съкратено – smalldatetime типът данни няма информация за часовата зона.

При това преобразуване размерът на паметта е намалял от 10 байта (11 байта, когато преброите точността) за datetimeoffset , до 4 байта за smalldatetime .

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

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

DECLARE @thedatetimeoffset datetimeoffset;SET @thedatetimeoffset ='2025-05-21 10:15:30.1234567 +07:00';ИЗБЕРЕТЕ @thedatetimeoffset КАТО 'datetimeoffset', CAST(@thedatetimeoffset) КАТО малък дата и време;' /предварително> 

Резултат:

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

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

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

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

Резултат:

+----------------------------------+-------- ----------------+| datetimeoffset | smalldatetime ||-----------------------------------+--------- ---------------|| 2025-05-21 10:15:30.1234567 +07: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. Групиране по колона и множество редове в един ред множество колони

  2. Как работи FOR XML PATH('') при конкатенация на редове

  3. Използване на INSERT INTO от SQL Server за промяна на данните на Salesforce

  4. Представяме първата в света SaaS платформа за предоставяне на задълбочена диагностика за хибридни SQL сървърни среди

  5. Как правилно да вмъкнете нов ред в nvarchar