sql >> Databáze >  >> RDS >> Sqlserver

Převést „datetimeoffset“ na „date“ v SQL Server (příklady T-SQL)

Pokud máte datetimeoffset hodnotu, ale nepotřebujete část posunutí času a časového pásma, převedete ji na datum vám ušetří spoustu místa v úložišti (a zároveň odstraní zbytečné detaily z hodnoty). Tento článek obsahuje příklady převodu datetimeoffset hodnotu k datu hodnotu v SQL Server.

datetimeoffset datový typ zahrnuje datum a čas s posunem časového pásma. Má také zlomkovou sekundovou část mezi 0 a 7 (to závisí na tom, kolik zlomkových sekund je jí přiřazeno). To se provádí pomocí datetimeoffset(n) syntax. Pokud toto nezadáte, použije se 7 (výchozí). Velikost úložiště tohoto typu dat je buď 8, 9 nebo 10 bajtů (plus 1 bajt pro uložení přesnosti), v závislosti na použité přesnosti. Jeho přesnost je 100 nanosekund.

Datum datový typ na druhé straně obsahuje pouze datum. Nezahrnuje čas a má přesnost 1 den. K ukládání používá 3 bajty.

Když převedete datetimeoffset hodnotu k datu datový typ, ztratíte časovou část (včetně posunu časového pásma). Zmenšíte však také velikost úložiště na pevné 3 bajty. Tento převod byste samozřejmě provedli pouze v případě, že nepotřebujete časovou část a posun časového pásma.

Příklad 1 – Implicitní konverze

Zde je příklad implicitní konverze mezi datetimeoffset a datum .

DECLARE @thedatetimeoffset datetimeoffset, @thedate date;SET @thedatetimeoffset ='2025-05-21 10:15:30.1234567 +10:30';SET @thedate =@thedatetimeoffset;SELECT @thedatetimeoffset AS 'datetimedateoffset', @thedatetimeoffset', @thedatetimeoffset AS 'date';

Výsledek:

+------------------------------------+--------- ---+| datum a čas offset | datum ||------------------------------------+----------- --|| 2025-05-21 10:15:30.1234567 +10:30 | 2025-05-21 |+------------------------------------+------- ------+

Jedná se o implicitní převod, protože k jeho explicitnímu převodu nepoužíváme konverzní funkci (jako jsou ty níže). V tomto případě SQL Server provede implicitní převod za scénou, když se pokusíme přiřadit datetimeoffset hodnotu k datu proměnná.

Zde vidíme, že datum hodnota obsahuje pouze datum (bez časové složky). Z hodnoty byla odstraněna časová složka včetně posunutí časového pásma.

V tomto příkladu datetimeoffset hodnota používá výchozí přesnost (což má za následek 7 desetinných míst). Výsledkem je, že datový typ používá 10 bajtů (ve skutečnosti 11 bajtů, pokud počítáte bajt navíc, který ukládá přesnost). Datum hodnota používá pouze 3 bajty.

Příklad 2 – Explicitní konverze pomocí CAST()

Zde je příklad explicitní konverze. V tomto případě používám CAST() funkce přímo v SELECT k explicitnímu převodu mezi datetimeoffset a datum .

DECLARE @thedatetimeoffset datetimeoffset;SET @thedatetimeoffset ='2025-05-21 10:15:30.1234567 +10:30';SELECT @thedatetimeoffset AS 'datetimeoffset', CAST(@thedatetimeoffset AS date) AS 'datum'; 

Výsledek:

+------------------------------------+--------- ---+| datum a čas offset | datum ||------------------------------------+----------- --|| 2025-05-21 10:15:30.1234567 +10:30 | 2025-05-21 |+------------------------------------+------- ------+

Příklad 3 – Explicitní převod pomocí CONVERT()

Zde je příklad explicitní konverze pomocí CONVERT() funkce namísto CAST() .

DECLARE @thedatetimeoffset datetimeoffset;SET @thedatetimeoffset ='2025-05-21 10:15:30.1234567 +10:30';SELECT @thedatetimeoffset AS 'datetimeoffset', CONVERT(date, @thedatetimeoffset) AS 'date'; 

Výsledek:

+------------------------------------+--------- ---+| datum a čas offset | datum ||------------------------------------+----------- --|| 2025-05-21 10:15:30.1234567 +10:30 | 2025-05-21 |+------------------------------------+------- ------+

  1. Nastavení a konfigurace skupiny Always-on Availability Group na SQL Server

  2. SQL - POKUD EXISTUJE AKTUALIZUJTE JINÉ INSERT INTO

  3. Jak nahradit část řetězce v T-SQL

  4. 10 užitečných zkratek pro Microsoft Access při práci s ovládacími prvky na formulářích a sestavách