Tento článek obsahuje příklady převodu smalldatetime hodnotu na datum a čas hodnotu v SQL Server.
smalldatetime datový typ nemá žádné zlomkové sekundy a jeho složka sekund je vždy nastavena na nulu (:00). Jeho přesnost je zaokrouhlena na nejbližší minutu.
datum a čas datový typ na druhé straně obsahuje 3-místnou část ve zlomcích sekund a jeho přesnost je zaokrouhlena na přírůstky 0,000, 003 nebo 007 sekund.
Když převedete smalldatetime hodnotu na datetime , smalldatetime hodnota se zkopíruje do datetime hodnota. Zlomkové sekundy jsou nastaveny na 0.
Ve většině případů by bylo lepší převést na datetime2 datový typ namísto datetime . Tím se zvýší přesnost při použití stejné velikosti úložiště. Pokud však opravdu potřebujete, aby byl datetime , zde je několik příkladů.
Příklad 1 – Implicitní konverze
Zde je příklad implicitní konverze mezi smalldatetime a datum a čas .
DECLARE @thesmalldatetime smalldatetime, @thedatetime datetime; SET @thesmalldatetime = '2025-05-21 10:15:30'; SET @thedatetime = @thesmalldatetime; SELECT @thesmalldatetime AS 'smalldatetime', @thedatetime AS 'datetime';
Výsledek:
+---------------------+-------------------------+ | smalldatetime | datetime | |---------------------+-------------------------| | 2025-05-21 10:16:00 | 2025-05-21 10:16:00.000 | +---------------------+-------------------------+
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 smalldatetime hodnotu na datum a čas proměnná.
V tomto příkladu vidíme, že smalldatetime hodnota nezahrnuje zlomkové sekundy, sekundy byly nastaveny na nulu a minuta byla zaokrouhlena nahoru od skutečné hodnoty, kterou jsem se jí pokusil přiřadit.
Nicméně datum a čas hodnota obsahuje 3-místnou zlomkovou část, která je nastavena na nulu.
Příklad 2 – Změna zlomkové části
I když je zlomková část nastavena na nulu, jakmile hodnotu převedete na datetime , nyní můžete změnit zlomkovou část (a sekundovou část).
V tomto příkladu používám DATEADD()
funkce pro úpravu zlomků sekund datetime hodnotu.
DECLARE @thesmalldatetime smalldatetime, @thedatetime datetime; SET @thesmalldatetime = '2025-05-21 10:15:30'; SET @thedatetime = @thesmalldatetime; SELECT @thesmalldatetime AS 'smalldatetime', @thedatetime AS 'datetime', DATEADD(millisecond, 123, @thedatetime) AS 'datetime Modified';
Výsledek (při použití vertikálního výstupu):
smalldatetime | 2025-05-21 10:16:00 datetime | 2025-05-21 10:16:00.000 datetime Modified | 2025-05-21 10:16:00.123
Příklad 3 – 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 smalldatetime a datum a čas .
DECLARE @thesmalldatetime smalldatetime; SET @thesmalldatetime = '2025-05-21 10:15:30'; SELECT @thesmalldatetime AS 'thesmalldatetime', CAST(@thesmalldatetime AS datetime) AS 'datetime';
Výsledek:
+---------------------+-------------------------+ | thesmalldatetime | datetime | |---------------------+-------------------------| | 2025-05-21 10:16:00 | 2025-05-21 10:16:00.000 | +---------------------+-------------------------+
Příklad 4 – Explicitní převod pomocí CONVERT()
Zde je příklad explicitní konverze pomocí CONVERT()
funkce namísto CAST()
.
DECLARE @thesmalldatetime smalldatetime; SET @thesmalldatetime = '2025-05-21 10:15:30'; SELECT @thesmalldatetime AS 'thesmalldatetime', CONVERT(datetime, @thesmalldatetime) AS 'datetime';
Výsledek:
+---------------------+-------------------------+ | thesmalldatetime | datetime | |---------------------+-------------------------| | 2025-05-21 10:16:00 | 2025-05-21 10:16:00.000 | +---------------------+-------------------------+
Jak již bylo zmíněno, zvažte převod na datetime2 datový typ namísto datetime . To poskytuje zvýšenou přesnost při použití stejné velikosti úložiště.