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

Come convertire da un formato data a un altro in SQL Server utilizzando CONVERT()

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 xmlgrandesql_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.