Questo articolo contiene esempi di conversione di un smalldatetime valore a un datetime valore in SQL Server.
Quando converti un smalldatetime valore a datetime , le ore e i minuti vengono copiati e i secondi e le frazioni di secondo vengono impostati su 0
.
Esempio 1 – 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 in modo esplicito da smalldatetime a data e ora .
DECLARE @thesmalldatetime smalldatetime SET @thesmalldatetime = '2031-03-25 11:15:29' SELECT @thesmalldatetime AS 'thesmalldatetime', CAST(@thesmalldatetime AS datetime) AS 'datetime';
Risultato:
+---------------------+-------------------------+ | thesmalldatetime | datetime | |---------------------+-------------------------| | 2031-03-25 11:15:00 | 2031-03-25 11:15:00.000 | +---------------------+-------------------------+
In primo luogo, possiamo vedere che il thesmalldatetime il valore utilizza 00
per il componente secondi, anche se lo impostiamo esplicitamente su 29
. Questo perché quando si utilizza thesmalldatetime tipo di dati, i secondi sono sempre zero (e senza secondi frazionari).
Pertanto, quando convertiamo il valore in datetime , il valore dei secondi (e dei secondi frazionari) viene impostato su zero. Se avessimo appena assegnato il valore originale a datetime in primo luogo i secondi sarebbero rimasti intatti:
DECLARE @thedatetime datetime SET @thedatetime = '2031-03-25 11:15:29' SELECT @thedatetime AS 'thedatetime';
Risultato:
+-------------------------+ | thedatetime | |-------------------------| | 2031-03-25 11:15:29.000 | +-------------------------+
Non solo i secondi sarebbero rimasti intatti, ma anche eventuali secondi frazionari sarebbero rimasti intatti (ma solo fino a una scala di 3):
DECLARE @thedatetime datetime SET @thedatetime = '2031-03-25 11:15:29.123' SELECT @thedatetime AS 'thedatetime';
Risultato:
+-------------------------+ | thedatetime | |-------------------------| | 2031-03-25 11:15:29.123 | +-------------------------+
Esempio 2 – Arrotondamento
Ecco cosa succede se impostiamo il componente secondi su un valore più alto prima di assegnarlo a smalldatetime tipo di dati.
DECLARE @thesmalldatetime smalldatetime SET @thesmalldatetime = '2031-03-25 11:15:31' SELECT @thesmalldatetime AS 'thesmalldatetime', CAST(@thesmalldatetime AS datetime) AS 'datetime';
Risultato:
+---------------------+-------------------------+ | thesmalldatetime | datetime | |---------------------+-------------------------| | 2031-03-25 11:16:00 | 2031-03-25 11:16:00.000 | +---------------------+-------------------------+
Quindi il componente dei minuti viene ora arrotondato al minuto successivo.
Esempio 3 – Conversione esplicita mediante CONVERT()
Questo è lo stesso del primo esempio, tranne che questa volta uso il CONVERT()
funzione invece di CAST()
.
DECLARE @thesmalldatetime smalldatetime SET @thesmalldatetime = '2031-03-25 11:15:29' SELECT @thesmalldatetime AS 'thesmalldatetime', CONVERT(datetime, @thesmalldatetime) AS 'datetime';
Risultato:
+---------------------+-------------------------+ | thesmalldatetime | datetime | |---------------------+-------------------------| | 2031-03-25 11:15:00 | 2031-03-25 11:15:00.000 | +---------------------+-------------------------+
Esempio 4 – Conversione implicita
Ecco un esempio di come fare la stessa cosa, ma usando una conversione di tipo implicita.
DECLARE @thesmalldatetime smalldatetime, @thedatetime datetime SET @thesmalldatetime = '2031-03-25 11:15:29' SET @thedatetime = @thesmalldatetime SELECT @thesmalldatetime AS 'thesmalldatetime', @thedatetime AS 'datetime';
Risultato:
+---------------------+-------------------------+ | thesmalldatetime | datetime | |---------------------+-------------------------| | 2031-03-25 11:15:00 | 2031-03-25 11:15:00.000 | +---------------------+-------------------------+
Quindi otteniamo lo stesso risultato, indipendentemente dal fatto che si tratti di una conversione esplicita o implicita.
Questa è una conversione implicita perché non stiamo usando una funzione di conversione per convertirla in modo esplicito. Stiamo semplicemente assegnando il valore da una variabile di un tipo di dati a una variabile di un altro tipo di dati. In questo caso, SQL Server esegue una conversione implicita dietro le quinte quando proviamo ad assegnare smalldatetime valore a un datetime variabile.