Tento článek obsahuje příklady převodu smalldatetime hodnotu na datetime2 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.
datetime2 datový typ na druhé straně umožňuje zadat přesnost ve zlomcích 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.
Když převedete smalldatetime hodnotu na datetime2 , hodiny a minuty se zkopírují. Sekundy a zlomky sekund jsou nastaveny na 0.
Příklad 1 – Implicitní konverze
Zde je příklad implicitní konverze mezi smalldatetime a datetime2 .
DECLARE @thesmalldatetime smalldatetime, @thedatetime2 datetime2; SET @thesmalldatetime = '2025-05-21 10:15:30'; SET @thedatetime2 = @thesmalldatetime; SELECT @thesmalldatetime AS 'smalldatetime', @thedatetime2 AS 'datetime2';
Výsledek:
+---------------------+-----------------------------+ | smalldatetime | datetime2 | |---------------------+-----------------------------| | 2025-05-21 10:16:00 | 2025-05-21 10:16:00.0000000 | +---------------------+-----------------------------+
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 datetime2 proměnná.
V tomto příkladu vidíme, že smalldatetime hodnota nezahrnuje zlomkové sekundy, 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. Výsledkem je použití 7 nul ve zlomkové části.
Příklad 2 – Odstraňte zlomkovou část
V případě potřeby můžete zlomky sekund odstranit. Chcete-li to provést, jednoduše použijte datetime2(0)
při deklaraci proměnné.
DECLARE @thesmalldatetime smalldatetime, @thedatetime2 datetime2(0); SET @thesmalldatetime = '2025-05-21 10:15:30'; SET @thedatetime2 = @thesmalldatetime; SELECT @thesmalldatetime AS 'smalldatetime', @thedatetime2 AS 'datetime2';
Výsledek:
+---------------------+---------------------+ | smalldatetime | datetime2 | |---------------------+---------------------| | 2025-05-21 10:16:00 | 2025-05-21 10:16:00 | +---------------------+---------------------+
V tomto případě tedy oba datové typy vracejí stejnou hodnotu. Rozdíl je však v tom, že datetime2 má schopnost poskytovat přesnost na sekundu (ve srovnání s smalldatetime přesnost na minutu).
Příklad:
DECLARE @thesmalldatetime smalldatetime, @thedatetime2 datetime2(0); SET @thesmalldatetime = '2025-05-21 10:15:30'; SET @thedatetime2 = @thesmalldatetime; SELECT DATEADD(second, 30, @thesmalldatetime) AS 'smalldatetime', DATEADD(second, 30, @thedatetime2) AS 'datetime2';
Výsledek:
+---------------------+---------------------+ | smalldatetime | datetime2 | |---------------------+---------------------| | 2025-05-21 10:17:00 | 2025-05-21 10:16:30 | +---------------------+---------------------+
V tomto příkladu jsem použil DATEADD()
funkce pro přidání 30 sekund ke každé hodnotě. Každý datový typ však vrací jiný výsledek. datetime2 datový typ respektuje sekundovou část a poskytuje správný výsledek se 100% přesností. smalldatetime typ se na druhou stranu zaokrouhluje nahoru na nejbližší minuty (zatímco sekundová část zůstává na nule).
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 datetime2 .
DECLARE @thesmalldatetime smalldatetime; SET @thesmalldatetime = '2025-05-21 10:15:30'; SELECT @thesmalldatetime AS 'thesmalldatetime', CAST(@thesmalldatetime AS datetime2(0)) AS 'datetime2(0)';
Výsledek:
+---------------------+---------------------+ | thesmalldatetime | datetime2(0) | |---------------------+---------------------| | 2025-05-21 10:16:00 | 2025-05-21 10:16:00 | +---------------------+---------------------+
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(datetime2(0), @thesmalldatetime) AS 'datetime2(0)';
Výsledek:
+---------------------+---------------------+ | thesmalldatetime | datetime2(0) | |---------------------+---------------------| | 2025-05-21 10:16:00 | 2025-05-21 10:16:00 | +---------------------+---------------------+