Tento článek obsahuje příklady převodu datetime hodnotu na smalldatetime hodnotu v SQL Server.
Jedna z výhod převodu data a času hodnotu na smalldatetime spočívá v tom, že snížíte velikost úložiště z 8 bajtů na 4 bajty. Tím však ztrácíte přesnost.
datum a čas datový typ obsahuje 3místnou část ve zlomcích sekund. Jeho přesnost je zaokrouhlena na 0,000, 003 nebo 007 sekund.
smalldatetime datový typ na druhé straně nemá žádné zlomkové sekundy a jeho složka sekund je vždy nastavena na nulu (:00). Také má přesnost pouze na nejbližší minutu.
Když převedete datum a čas hodnotu na smalldatetime , zkopíruje se datum a část času. Sekundová složka se nastaví na nulu (bez ohledu na původní hodnotu) 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 datetime a smalldatetime .
DECLARE @thedatetime datetime, @thesmalldatetime smalldatetime; SET @thedatetime = '2025-05-21 10:15:30.123'; SET @thesmalldatetime = @thedatetime; SELECT @thedatetime AS 'datetime', @thesmalldatetime AS 'smalldatetime';
Výsledek:
+-------------------------+---------------------+ | datetime | smalldatetime | |-------------------------+---------------------| | 2025-05-21 10:15:30.123 | 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 datetime 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.
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 datetime a smalldatetime .
DECLARE @thedatetime datetime; SET @thedatetime = '2025-05-21 10:15:30.125'; SELECT @thedatetime AS 'datetime', CAST(@thedatetime AS smalldatetime) AS 'smalldatetime';
Výsledek:
+-------------------------+---------------------+ | datetime | smalldatetime | |-------------------------+---------------------| | 2025-05-21 10:15:30.127 | 2025-05-21 10:16:00 | +-------------------------+---------------------+
Možná jste si všimli, že v tomto příkladu jsem změnil zlomkové sekundy při přiřazování počáteční hodnoty @thedatetime
. Ale protože to přiřazuji k datu a času datový typ, část ve zlomcích sekund se zaokrouhlí nahoru (protože její přesnost je zaokrouhlena na přírůstky 0,000, 003 nebo 0,007 sekund). V tomto případě se snažím přiřadit zlomkové sekundy 125
ale zaokrouhlí se nahoru na 127
.
Toto však nemá vliv na smalldatetime hodnotu.
Příklad 3 – Explicitní převod pomocí CONVERT()
Zde je příklad explicitní konverze pomocí CONVERT()
funkce namísto CAST()
.
DECLARE @thedatetime datetime; SET @thedatetime = '2025-05-21 10:15:30.125'; SELECT @thedatetime AS 'datetime', CONVERT(smalldatetime, @thedatetime) AS 'smalldatetime';
Výsledek:
+-------------------------+---------------------+ | datetime | smalldatetime | |-------------------------+---------------------| | 2025-05-21 10:15:30.127 | 2025-05-21 10:16:00 | +-------------------------+---------------------+