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

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

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

Jedna z výhod převodu datetime2 hodnotu na smalldatetime spočívá v tom, že snížíte velikost úložiště ze 7, 8 nebo 9 bajtů na 4 bajty. Tím však ztrácíte přesnost.

datetime2 datový typ umožňuje zadat přesnost na zlomky sekund od 0 do 7. Pokud toto nezadáte, použije se 7 (výchozí). Pokud zadáte nulu (0 ), jeho přesnost bude zaokrouhlena na nejbližší sekundu.

smalldatetime datový typ na druhé straně nemá žádné zlomkové sekundy a jeho složka sekund je vždy nastavena na nulu (:00). Jeho přesnost je zaokrouhlena na nejbližší minutu.

Když převedete datetime2 hodnotu na smalldatetime , zkopíruje se datum a část času. Sekundová složka se nastaví na nulu (bez ohledu na původní hodnotu sekundové složky) a čas se zaokrouhlí na nejbližší minuty. Všechny zlomky sekund jsou odstraněny.

Příklad 1 – Implicitní konverze

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

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

Výsledek:

+-----------------------------+---------------- -----+| datum a čas2 | smalldatetime ||-----------------------------+----------------- ----|| 2025-05-21 10:15:30.1234567 | 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 datetime2 hodnotu na smalldatetime proměnná.

V tomto příkladu vidíme, že smalldatetime hodnota nezahrnuje zlomky sekund, sekundy byly nastaveny na nulu a minuty byly zaokrouhleny nahoru.

V tomto případě datetime2 hodnota používá přesnost 7. Důvodem je, že 7 je výchozí hodnota. Neuvedl jsem přesnost, a proto byla použita výchozí hodnota.

Ale vrátilo by to stejný výsledek bez ohledu na přesnost, kterou jsem zvolil. I kdybych to snížil na nulu (tj. deklaroval to jako datetime2(0) ), stále by vrátil stejný výsledek.

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

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

Výsledek:

+---------------------+---------------------+| datum a čas2 | smalldatetime ||---------------------+---------------------|| 21.05.2025 10:15:30 | 2025-05-21 10:16:00 |+---------------------+----------------- -----+

V tomto příkladu jsem se rozhodl použít nulovou stupnici pro datetime2 hodnota (tj. datetime2(0) ), to však neovlivní výsledný smalldatetime hodnotu.

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

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

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

Výsledek:

+---------------------+---------------------+| datum a čas2 | smalldatetime ||---------------------+---------------------|| 21.05.2025 10:15:30 | 2025-05-21 10:16:00 |+---------------------+----------------- -----+

  1. Proveďte více dotazů v jediném příkazu Oracle v C#

  2. Existují bezpečnostní rizika spojená s monitorováním Spotlight Cloudu?

  3. Automatizované testování záloh PostgreSQL

  4. Upgrade na nejnovější Jira s nejnovější verzí serveru MariaDB