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

Converti "datetime2" in "date" in SQL Server (esempi T-SQL)

Questo articolo contiene esempi di conversione di un datetime2 valore a una data valore in SQL Server.

Quando converti un datetime2 valore a una data tipo di dati, si perde la parte temporale. Tuttavia, si riduce anche la dimensione di archiviazione da 7 a 9 byte fino a 3 byte. In ogni caso, faresti questa conversione solo se non hai bisogno della porzione di tempo.

La dataora2 il tipo di dati include la data e l'ora con una parte di secondi frazionari compresa tra 0 e 7 (questo dipende da quanti secondi frazionari gli vengono assegnati). La sua precisione è di 100 nanosecondi.

La data tipo di dati d'altra parte, non include l'ora e ha una precisione di 1 giorno.

Esempio 1 – Conversione implicita

Ecco un esempio di conversione implicita tra datetime2 e data .

DECLARE 
  @thedatetime2 datetime2, 
  @thedate date;
SET @thedatetime2 = '2025-05-21 10:15:30.1234567';
SET @thedate = @thedatetime2;
SELECT 
  @thedatetime2 AS 'datetime2',
  @thedate AS 'date';

Risultato:

+-----------------------------+------------+
| datetime2                   | date       |
|-----------------------------+------------|
| 2025-05-21 10:15:30.1234567 | 2025-05-21 |
+-----------------------------+------------+

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 il datetime2 valore a una data variabile.

Qui possiamo vedere che la data il valore include solo la data (senza il componente ora).

In questo esempio, datetime2 value utilizza la precisione predefinita (che risulta in 7 cifre decimali). Questo potrebbe essere ridotto a qualsiasi numero e il risultato della conversione sarebbe lo stesso.

DECLARE 
  @thedatetime2 datetime2(0), 
  @thedate date;
SET @thedatetime2 = '2025-05-21 10:15:30.1234567';
SET @thedate = @thedatetime2;
SELECT 
  @thedatetime2 AS 'datetime2',
  @thedate AS 'date';

Risultato:

+---------------------+------------+
| datetime2           | date       |
|---------------------+------------|
| 2025-05-21 10:15:30 | 2025-05-21 |
+---------------------+------------+

Esempio 2 – 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 tra datetime2 e data .

DECLARE @thedatetime2 datetime2(4);
SET @thedatetime2 = '2025-05-21 10:15:30.1234';
SELECT 
  @thedatetime2 AS 'datetime2',
  CAST(@thedatetime2 AS date) AS 'date'; 

Risultato:

+--------------------------+------------+
| datetime2                | date       |
|--------------------------+------------|
| 2025-05-21 10:15:30.1234 | 2025-05-21 |
+--------------------------+------------+

Esempio 3 – Conversione esplicita mediante CONVERT()

Ecco un esempio di una conversione esplicita utilizzando CONVERT() funzione invece di CAST() .

DECLARE @thedatetime2 datetime2(4);
SET @thedatetime2 = '2025-05-21 10:15:30.1234';
SELECT 
  @thedatetime2 AS 'datetime2',
  CONVERT(date, @thedatetime2) AS 'date'; 

Risultato:

+--------------------------+------------+
| datetime2                | date       |
|--------------------------+------------|
| 2025-05-21 10:15:30.1234 | 2025-05-21 |
+--------------------------+------------+