Tento článek obsahuje příklady převodu smalldatetime hodnotu na datum a čas hodnotu v SQL Server.
Když převedete smalldatetime hodnotu na datetime , hodiny a minuty se zkopírují a sekundy a zlomkové sekundy se nastaví na 0
.
Příklad 1 – Explicitní konverze pomocí CAST()
Zde je příklad explicitní konverze. V tomto případě používám CAST()
funkce přímo v SELECT
příkaz explicitně převést z smalldatetime na datum a čas .
DECLARE @thesmalldatetime smalldatetimeSET @thesmalldatetime ='2031-03-25 11:15:29'SELECT @thesmalldatetime JAKO 'thesmalldatetime', CAST(@thesmalldatetime AS datetime) JAKO 'datetime';
Výsledek:
+---------------------+------------------------ -+| thesmalldatetime | datum a čas ||---------------------+------------------------- || 2031-03-25 11:15:00 | 2031-03-25 11:15:00.000 |+---------------------+---------------- ---------+
Za prvé, můžeme vidět, že thesmalldatetime hodnota používá 00
pro komponentu sekund, i když jsme ji výslovně nastavili na 29
. Je to proto, že při použití thesmalldatetime datový typ, sekundy jsou vždy nula (a bez zlomkových sekund).
Když tedy převedeme hodnotu na datetime , hodnota sekund (a zlomkové sekundy) jsou nastaveny na nulu. Kdybychom právě přiřadili původní hodnotu datetime za prvé, sekundy by zůstaly nedotčené:
DECLARE @thedatetime datetimeSET @thedatetime ='2031-03-25 11:15:29'SELECT @thedatetime AS 'thedatetime';
Výsledek:
+-------------------------+| thedatetime ||-------------------------|| 2031-03-25 11:15:29.000 |+-------------------------+
Nejen, že by sekundy zůstaly nedotčené, ale také jakékoli zlomkové sekundy by zůstaly nedotčené (ale pouze do stupnice 3):
DECLARE @thedatetime datetimeSET @thedatetime ='2031-03-25 11:15:29.123'SELECT @thedatetime AS 'thedatetime';
Výsledek:
+-------------------------+| thedatetime ||-------------------------|| 2031-03-25 11:15:29.123 |+-------------------------+
Příklad 2 – Zaokrouhlení
Co se stane, když komponentu sekund nastavíme na vyšší hodnotu, než ji přiřadíme k smalldatetime datový typ.
DECLARE @thesmalldatetime smalldatetimeSET @thesmalldatetime ='2031-03-25 11:15:31'SELECT @thesmalldatetime JAKO 'thesmalldatetime', CAST(@thesmalldatetime AS datetime) JAKO 'datetime';
Výsledek:
+---------------------+------------------------ -+| thesmalldatetime | datum a čas ||---------------------+------------------------- || 2031-03-25 11:16:00 | 2031-03-25 11:16:00.000 |+---------------------+---------------- ---------+
Takže složka minut je nyní zaokrouhlena nahoru na další minutu.
Příklad 3 – Explicitní převod pomocí CONVERT()
Toto je stejné jako v prvním příkladu, ale tentokrát používám CONVERT()
funkce namísto CAST()
.
DECLARE @thesmalldatetime smalldatetimeSET @thesmalldatetime ='2031-03-25 11:15:29'SELECT @thesmalldatetime AS 'thesmalldatetime', CONVERT(datetime, @thesmalldatetime) AS 'datetime';
Výsledek:
+---------------------+------------------------ -+| thesmalldatetime | datum a čas ||---------------------+------------------------- || 2031-03-25 11:15:00 | 2031-03-25 11:15:00.000 |+---------------------+---------------- ---------+
Příklad 4 – Implicitní konverze
Zde je příklad provedení stejné věci, ale s použitím implicitní konverze typu.
DECLARE @thesmalldatetime smalldatetime, @thedatetime datetimeSET @thesmalldatetime ='2031-03-25 11:15:29'SET @thedatetime =@thesmalldatetimeSELECT @thesmalldatetime AS 'thesmalldatetime', @thedatetime AS 'pre>datetime';Výsledek:
+---------------------+------------------------ -+| thesmalldatetime | datum a čas ||---------------------+------------------------- || 2031-03-25 11:15:00 | 2031-03-25 11:15:00.000 |+---------------------+---------------- ---------+Dostaneme tedy stejný výsledek bez ohledu na to, zda se jedná o explicitní nebo implicitní konverzi.
Jedná se o implicitní převod, protože k jeho explicitnímu převodu nepoužíváme konverzní funkci. Jednoduše přiřadíme hodnotu z proměnné jednoho datového typu k proměnné jiného datového typu. 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á.