Tento článek obsahuje příklady převodu datum hodnotu na datum a čas hodnotu v SQL Server.
Když převedete datum hodnotu na datetime , jsou k hodnotě přidány další informace. Důvodem je datum a čas datový typ obsahuje informace o datu i čase. Datum datový typ na druhé straně obsahuje pouze informace o datu.
Příklad 1 – Implicitní konverze
Zde je příklad implicitní konverze mezi datem a datum a čas .
DECLARE @thedate date, @thedatetime datetime SET @thedate = '2020-12-01' SET @thedatetime = @thedate SELECT @thedate AS 'date', @thedatetime AS 'datetime';
Výsledek:
+------------+-------------------------+ | date | datetime | |------------+-------------------------| | 2020-12-01 | 2020-12-01 00:00: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 datum hodnotu na datum a čas proměnná.
Vidíme, že datum proměnná obsahuje pouze informace o datu, zatímco datetime proměnná obsahuje informace o datu i čase.
Při převodu mezi datem a datum a čas , časová složka je nastavena na 00:00:00.000
. Je to proto, že hodnota data neobsahuje žádné časové informace, takže SQL Server nemůže nijak zjistit, jaký čas chcete (pokud nějaký).
Příklad 2 – Úprava času
Pokud potřebujete změnit čas (ale zachovat stejné datum), můžete použít DATEADD()
funkce udělat právě to.
DECLARE @thedate date, @thedatetime datetime SET @thedate = '2020-12-01' SET @thedatetime = @thedate SET @thedatetime = DATEADD(hour, 8, @thedatetime) SELECT @thedate AS 'date', @thedatetime AS 'datetime';
Výsledek:
+------------+-------------------------+ | date | datetime | |------------+-------------------------| | 2020-12-01 | 2020-12-01 08:00:00.000 | +------------+-------------------------+
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 datem a datum a čas .
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', CAST(@thedate AS datetime) AS 'datetime';
Výsledek:
+------------+-------------------------+ | date | datetime | |------------+-------------------------| | 2020-12-01 | 2020-12-01 00:00:00.000 | +------------+-------------------------+
Dostaneme tedy stejný výsledek jako implicitní převod.
Čas můžeme také upravit takto:
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', DATEADD(hour, 8, CAST(@thedate AS datetime)) AS 'datetime';
Výsledek:
+------------+-------------------------+ | date | datetime | |------------+-------------------------| | 2020-12-01 | 2020-12-01 08:00:00.000 | +------------+-------------------------+
Příklad 4 – Explicitní převod pomocí CONVERT()
Zde je příklad explicitní konverze pomocí CONVERT()
funkce namísto CAST()
.
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', CONVERT(datetime, @thedate) AS 'datetime';
Výsledek:
+------------+-------------------------+ | date | datetime | |------------+-------------------------| | 2020-12-01 | 2020-12-01 00:00:00.000 | +------------+-------------------------+
A úprava času:
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', DATEADD(hour, 8, CONVERT(datetime, @thedate)) AS 'datetime';
Výsledek:
+------------+-------------------------+ | date | datetime | |------------+-------------------------| | 2020-12-01 | 2020-12-01 08:00:00.000 | +------------+-------------------------+