Questo articolo contiene esempi di conversione di una data valore a un datetime valore in SQL Server.
Quando converti una data valore a datetime , al valore vengono aggiunte informazioni aggiuntive. Questo perché il datetime il tipo di dati contiene informazioni sulla data e sull'ora. La data il tipo di dati, invece, contiene solo informazioni sulla data.
Esempio 1 – Conversione implicita
Ecco un esempio di conversione implicita tra data e data e ora .
DECLARE @thedate date, @thedatetime datetime SET @thedate = '2020-12-01' SET @thedatetime = @thedate SELECT @thedate AS 'date', @thedatetime AS 'datetime';
Risultato:
+------------+-------------------------+ | date | datetime | |------------+-------------------------| | 2020-12-01 | 2020-12-01 00:00:00.000 | +------------+-------------------------+
Questa è una conversione implicita perché non stiamo usando una funzione di conversione (come quelle sotto) per convertirla in modo esplicito. In questo caso, SQL Server esegue una conversione implicita dietro le quinte quando proviamo ad assegnare la data valore a un datetime variabile.
Possiamo vedere che la data La variabile contiene solo informazioni sulla data, mentre datetime La variabile contiene informazioni sulla data e sull'ora.
Quando effettui una conversione tra data e data e ora , la componente temporale è impostata su 00:00:00.000
. Questo perché il valore della data non contiene informazioni sull'ora, quindi non c'è modo per SQL Server di sapere a che ora si desidera (se presente).
Esempio 2 – Modifica dell'ora
Se devi cambiare l'ora (ma mantenere la stessa data), puoi usare il DATEADD()
funzione per fare proprio questo.
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';
Risultato:
+------------+-------------------------+ | date | datetime | |------------+-------------------------| | 2020-12-01 | 2020-12-01 08:00:00.000 | +------------+-------------------------+
Esempio 3 – Conversione esplicita mediante CAST()
Ecco un esempio di conversione esplicita. In questo caso, utilizzo il CAST()
funzione direttamente all'interno di SELECT
dichiarazione da convertire esplicitamente tra data e data e ora .
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', CAST(@thedate AS datetime) AS 'datetime';
Risultato:
+------------+-------------------------+ | date | datetime | |------------+-------------------------| | 2020-12-01 | 2020-12-01 00:00:00.000 | +------------+-------------------------+
Quindi otteniamo lo stesso risultato della conversione implicita.
Possiamo anche regolare l'ora in questo modo:
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', DATEADD(hour, 8, CAST(@thedate AS datetime)) AS 'datetime';
Risultato:
+------------+-------------------------+ | date | datetime | |------------+-------------------------| | 2020-12-01 | 2020-12-01 08:00:00.000 | +------------+-------------------------+
Esempio 4 – Conversione esplicita mediante CONVERT()
Ecco un esempio di una conversione esplicita utilizzando CONVERT()
funzione invece di CAST()
.
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', CONVERT(datetime, @thedate) AS 'datetime';
Risultato:
+------------+-------------------------+ | date | datetime | |------------+-------------------------| | 2020-12-01 | 2020-12-01 00:00:00.000 | +------------+-------------------------+
E la regolazione dell'ora:
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', DATEADD(hour, 8, CONVERT(datetime, @thedate)) AS 'datetime';
Risultato:
+------------+-------------------------+ | date | datetime | |------------+-------------------------| | 2020-12-01 | 2020-12-01 08:00:00.000 | +------------+-------------------------+