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ístoCAST()
.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 |+---------------------+----------------- -----+