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

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

Tento článek obsahuje příklady převodu datetimeoffset hodnotu na smalldatetime v SQL Serveru.

Když převedete datetimeoffset hodnotu na smalldatetime , datum a hodiny se zkopírují. Minuty jsou zaokrouhleny nahoru (v závislosti na hodnotě sekund) a sekundy jsou nastaveny na 0.

datetimeoffset datový typ umožňuje zadat přesnost na zlomky sekund od 0 do 7. To se provádí pomocí datetimeoffset(n) syntax. Pokud toto nezadáte, použije se 7 (výchozí). Má také posun časového pásma. Velikost úložiště tohoto typu dat je buď 8, 9 nebo 10 bajtů (plus 1 bajt pro přesnost), v závislosti na použité přesnosti.

smalldatetime datový typ na druhé straně nemá povědomí o časovém pásmu, a proto nezahrnuje žádný posun časového pásma. Také nemá žádné zlomkové sekundy a jeho složka sekund je vždy nastavena na nulu (:00). Jeho přesnost je s přesností na minutu. Velikost úložiště tohoto typu dat je pevně nastavena na 4 bajty.

Příklad 1 – Implicitní konverze

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

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

Výsledek:

+------------------------------------+--------- ------------+| datum a čas offset | smalldatetime ||------------------------------------+---------- -----------|| 2025-05-21 10:15:30.1234567 +07:00 | 2025-05-21 10:16:00 |+-------------------------------------+- --------------------+

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 na smalldatetime proměnná.

Vidíme, že smalldatetime proměnná nemá přesnost na zlomky sekund a její sekundy byly nastaveny na nulu. Také minuty byly zaokrouhleny nahoru, protože původní hodnota měla hodnotu sekund 30.

Dalším pozorováním je, že posun časového pásma byl zkrácen – smalldatetime datový typ nemá povědomí o časovém pásmu.

V tomto převodu se velikost úložiště zmenšila z 10 bajtů (11 bajtů, když počítáte přesnost) pro datetimeoffset , na 4 bajty pro smalldatetime .

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 smalldatetime .

DECLARE @thedatetimeoffset datetimeoffset;SET @thedatetimeoffset ='2025-05-21 10:15:30.1234567 +07:00';SELECT @thedatetimeoffset AS 'datetimeoffset', CAST(@thedatetimeoffset AS smalldatetimedate) AS ';sm /před> 

Výsledek:

+------------------------------------+--------- -----------------+| datum a čas offset | smalldatetime ||------------------------------------+---------- ----------------|| 2025-05-21 10:15:30.1234567 +07:00 | 2025-05-21 10:16:00 |+-------------------------------------+- ------------------------+

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 +07:00';SELECT @thedatetimeoffset AS 'datetimeoffset', CONVERT(smalldatetime, @thedatetimeoffset;všechny datum) AS /před> 

Výsledek:

+------------------------------------+--------- -----------------+| datum a čas offset | smalldatetime ||------------------------------------+---------- ----------------|| 2025-05-21 10:15:30.1234567 +07:00 | 2025-05-21 10:16:00 |+-------------------------------------+- ------------------------+

  1. Chyby v SQL Serveru při importu souboru CSV navzdory použití varchar(MAX) pro každý sloupec

  2. Jak získat záznam s maximální hodnotou v MySQL

  3. Jak vyřešit ORA-29913 pomocí externích tabulek

  4. Co to znamená, když je MySQL ve stavu Odesílání dat?