In SQL Server è possibile utilizzare l'utilizzo di CONVERT()
funzione per convertire un valore di data da un tipo di dati di data a un altro (o tra qualsiasi altro tipo di dati per quella materia). Tuttavia, questa non è l'unica funzione nella casella degli strumenti T-SQL per la conversione tra tipi di dati.
Il CAST()
La funzione fa parte dello standard ANSI SQL e fa la maggior parte delle cose CONVERT()
fa. Quindi, in molti casi, hai la possibilità di scegliere quale di queste funzioni preferisci utilizzare.
Molti professionisti del database preferiscono CAST()
poiché fa parte dello standard ANSI SQL, tuttavia, altri preferiscono CONVERT()
grazie alle funzionalità extra offerte dall'implementazione di T-SQL (come la possibilità di fornire uno stile di data).
In ogni caso, questo articolo fornisce esempi di conversione tra diversi formati di data utilizzando CAST()
.
Sintassi
La sintassi è questa:
CAST ( expression AS data_type [ ( length ) ] )
Questi argomenti sono definiti come segue:
expression
- Qualsiasi espressione valida.
data_type
- Il tipo di dati di destinazione. Ciò include xml , grande e sql_variant . Non è possibile utilizzare tipi di dati alias.
length
- Un numero intero facoltativo che specifica la lunghezza del tipo di dati di destinazione. Il valore predefinito è
30
.
Esempio 1 – Trasmetti SYSDATETIME() come data
In questo esempio, generiamo la data/ora corrente con SYSDATETIME()
funzione ed eseguire il cast del valore restituito come data tipo di dati.
Nota che il SYSDATETIME()
genera il suo valore come datetime2(7) tipo di dati, quindi lo stiamo convertendo da quel tipo di dati in un altro tipo di dati.
SELECT SYSDATETIME() AS Original, CAST(SYSDATETIME() AS date) AS Converted;
Risultato:
+-----------------------------+-------------+ | Original | Converted | |-----------------------------+-------------| | 2018-06-07 00:15:32.9265884 | 2018-06-07 | +-----------------------------+-------------+
Esempio 2 – Trasmetti SYSDATETIME() come smalldatetime
In questo esempio, eseguiamo il cast della data come smalldatetime tipo di dati.
SELECT SYSDATETIME() AS Original, CAST(SYSDATETIME() AS smalldatetime) AS Converted;
Risultato:
+-----------------------------+---------------------+ | Original | Converted | |-----------------------------+---------------------| | 2018-06-07 00:16:05.5142017 | 2018-06-07 00:16:00 | +-----------------------------+---------------------+
Esempio 3 – Trasmetti SYSDATETIME() come datetimeoffset
In questo esempio, eseguiamo il cast della data come datetimeoffset tipo di dati.
SELECT SYSDATETIME() AS Original, CAST(SYSDATETIME() AS datetimeoffset) AS Converted;
Risultato:
+-----------------------------+------------------------------------+ | Original | Converted | |-----------------------------+------------------------------------| | 2018-06-07 10:19:23.9457462 | 2018-06-07 10:19:23.9457462 +00:00 | +-----------------------------+------------------------------------+
Esempio 4 – Trasmetti SYSDATETIME() come ora
Non sei limitato a visualizzare il componente data del valore. Puoi anche trasmetterlo come ora tipo di dati, in modo che venga restituito solo il componente temporale. In questo modo:
SELECT SYSDATETIME() AS Original, CAST(SYSDATETIME() AS time) AS Converted;
Risultato:
+-----------------------------+------------------+ | Original | Converted | |-----------------------------+------------------| | 2018-06-07 00:20:21.5829364 | 00:20:21.5829364 | +-----------------------------+------------------+
Esempio 5 – Trasmetti SYSDATETIMEOFFSET() come data
Ecco un esempio che utilizza una funzione diversa per generare il valore di data/ora originale:
SELECT SYSDATETIMEOFFSET() AS Original, CAST(SYSDATETIMEOFFSET() AS date) AS Converted;
Risultato:
+------------------------------------+----------------------+ | Original | Converted | |------------------------------------+----------------------| | 2018-06-07 10:21:16.3617030 +10:00 | 2018-06-07 | +------------------------------------+----------------------+
Esempio 6 – Conversione da una query di database
Ecco un esempio di conversione della data recuperata da una colonna in WideWorldImporters database di esempio:
USE WideWorldImporters; SELECT DISTINCT TOP 10 LastEditedWhen, CAST(LastEditedWhen AS date) AS 'Converted' FROM Sales.CustomerTransactions;
Risultato:
+-----------------------------+-------------+ | LastEditedWhen | Converted | |-----------------------------+-------------| | 2013-01-02 11:30:00.0000000 | 2013-01-02 | | 2013-01-03 11:30:00.0000000 | 2013-01-03 | | 2013-01-04 11:30:00.0000000 | 2013-01-04 | | 2013-01-05 11:30:00.0000000 | 2013-01-05 | | 2013-01-06 11:30:00.0000000 | 2013-01-06 | | 2013-01-08 11:30:00.0000000 | 2013-01-08 | | 2013-01-09 11:30:00.0000000 | 2013-01-09 | | 2013-01-10 11:30:00.0000000 | 2013-01-10 | | 2013-01-11 11:30:00.0000000 | 2013-01-11 | | 2013-01-12 11:30:00.0000000 | 2013-01-12 | +-----------------------------+-------------+
Ho anche scritto un post che mostra come convertire tra formati di data usando CONVERT()
funzione utilizzando gli stessi esempi di cui sopra.