A volte, quando si lavora con database e altri ambienti di programmazione, si ottiene un valore di data ma è nel formato/tipo di dati errato. Ad esempio, se una data è stata generata con una funzione di data incorporata, potrebbe includere sia la data che l'ora, fino all'ultimo nanosecondo. E tutto ciò che vuoi è il giorno, il mese e l'anno, dì in questo modo:01-01-2018.
Se ciò accade mentre utilizzi SQL Server, puoi utilizzare CONVERT()
funzione per convertirlo in un altro tipo di dati. Quando lo fai, il tipo di dati determinerà il formato in cui appare.
Questo articolo fornisce esempi di utilizzo di CONVERT()
funzione in SQL Server per convertire un valore di data in un altro tipo di dati (data).
Sintassi
Innanzitutto, ecco come funziona la sintassi ufficiale:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
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
. style
- Un'espressione intera che specifica come
CONVERT()
la funzione tradurrà espressione . Per un valore di stile di NULL, viene restituito NULL. tipo_dati determina l'intervallo.
Esempio 1:conversione da SYSDATETIME() a Data Type
In questo esempio, generiamo la data/ora corrente con SYSDATETIME()
funzione e convertirlo in una 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, CONVERT(date, SYSDATETIME()) AS Converted;
Risultato:
+-----------------------------+-------------+ | Original | Converted | |-----------------------------+-------------| | 2018-06-06 22:53:47.2318751 | 2018-06-06 | +-----------------------------+-------------+
Esempio 2:conversione da SYSDATETIME() a tipo di dati smalldatetime
In questo esempio, convertiamo la data in un smalldatetime tipo di dati.
SELECT SYSDATETIME() AS Original, CONVERT(smalldatetime, SYSDATETIME()) AS Converted;
Risultato:
+-----------------------------+---------------------+ | Original | Converted | |-----------------------------+---------------------| | 2018-06-06 22:56:51.6873250 | 2018-06-06 22:57:00 | +-----------------------------+---------------------+
Esempio 3:conversione da SYSDATETIME() a tipo di dati datetimeoffset
In questo esempio, convertiamo la data in un datetimeoffset tipo di dati.
SELECT SYSDATETIME() AS Original, CONVERT(datetimeoffset, SYSDATETIME()) AS Converted;
Risultato:
+-----------------------------+------------------------------------+ | Original | Converted | |-----------------------------+------------------------------------| | 2018-06-07 09:17:15.2410693 | 2018-06-07 09:17:15.2410693 +00:00 | +-----------------------------+------------------------------------+
Esempio 4:conversione da SYSDATETIME() a tipo di dati time
Non sei limitato a visualizzare il componente data del valore. Puoi anche convertirlo in un tempo tipo di dati, in modo che venga restituito solo il componente temporale. In questo modo:
SELECT SYSDATETIME() AS Original, CONVERT(time, SYSDATETIME()) AS Converted;
Risultato:
+-----------------------------+------------------+ | Original | Converted | |-----------------------------+------------------| | 2018-06-06 23:01:41.7070775 | 23:01:41.7070775 | +-----------------------------+------------------+
Esempio 5:conversione da SYSDATETIMEOFFSET()
Gli esempi precedenti utilizzano tutti la stessa funzione incorporata per generare il valore di data/ora, ma ovviamente non è necessario che sia generato da questa funzione. Ecco un esempio che utilizza SYSDATETIMEOFFSET()
:
SELECT SYSDATETIMEOFFSET() AS Original, CONVERT(date, SYSDATETIMEOFFSET()) AS Converted;
Risultato:
+------------------------------------+----------------------+ | Original | Converted | |------------------------------------+----------------------| | 2018-06-07 09:12:27.3660685 +10:00 | 2018-06-07 | +------------------------------------+----------------------+
Esempio 6:conversione da una query di database
Ecco un esempio di conversione della data recuperata da una colonna nel database di esempio di WideWorldImporters:
USE WideWorldImporters; SELECT DISTINCT TOP 10 LastEditedWhen, CONVERT(date, LastEditedWhen) 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 | +-----------------------------+-------------+
Nota che non sei limitato alla sola conversione tra due diversi formati di data. Se, ad esempio, hai memorizzato una data come stringa, puoi anche utilizzare CONVERT()
per convertire da una stringa a una data, così come qualsiasi altro tipo di dati in cui potresti dover convertire.
Ho anche scritto un post che mostra come convertire tra formati di data usando CAST()
funzione utilizzando gli stessi esempi di cui sopra.