Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Esempi di conversione di "smalldatetime" in "datetime" in SQL Server (T-SQL)

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.