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

Come convertire tra formati di data in SQL Server utilizzando CAST()

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

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.