Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como converter entre formatos de data no SQL Server usando CAST()


No SQL Server, você pode usar o CONVERT() função para converter um valor de data de um tipo de dados de data para outro (ou entre qualquer outro tipo de dados). No entanto, essa não é a única função na caixa de ferramentas T-SQL para conversão entre tipos de dados.

O CAST() A função faz parte do padrão ANSI SQL e faz a maioria das coisas CONVERT() faz. Portanto, em muitos casos, você tem a opção de qual dessas funções prefere usar.

Muitos profissionais de banco de dados preferem CAST() devido ao fato de fazer parte do padrão ANSI SQL, no entanto, outros preferem CONVERT() devido à funcionalidade extra que a implementação do T-SQL oferece (como poder fornecer um estilo de data).

De qualquer forma, este artigo fornece exemplos de conversão entre diferentes formatos de data usando CAST() .


Sintaxe


A sintaxe fica assim:
CAST ( expression AS data_type [ ( length ) ] )

Esses argumentos são definidos da seguinte forma:
expression
Qualquer expressão válida.
data_type
O tipo de dados de destino. Isso inclui xmlgrandesql_variant . Tipos de dados de alias não podem ser usados.
length
Um inteiro opcional que especifica o comprimento do tipo de dados de destino. O valor padrão é 30 .

Exemplo 1 – Transmitir SYSDATETIME() como data


Neste exemplo, geramos a data/hora atual com o SYSDATETIME() função e converta o valor de retorno como uma data tipo de dados.

Observe que o SYSDATETIME() gera seu valor como um datetime2(7) tipo de dados, então estamos convertendo-o desse tipo de dados para outro tipo de dados.
SELECT 
    SYSDATETIME() AS Original,
    CAST(SYSDATETIME() AS date) AS Converted;

Resultado:
+-----------------------------+-------------+
| Original                    | Converted   |
|-----------------------------+-------------|
| 2018-06-07 00:15:32.9265884 | 2018-06-07  |
+-----------------------------+-------------+

Exemplo 2 – Converta SYSDATETIME() como smalldatetime


Neste exemplo, convertemos a data como um smalldatetime tipo de dados.
SELECT 
    SYSDATETIME() AS Original,
    CAST(SYSDATETIME() AS smalldatetime) AS Converted;

Resultado:
+-----------------------------+---------------------+
| Original                    | Converted           |
|-----------------------------+---------------------|
| 2018-06-07 00:16:05.5142017 | 2018-06-07 00:16:00 |
+-----------------------------+---------------------+

Exemplo 3 – Cast SYSDATETIME() como datetimeoffset


Neste exemplo, convertemos a data como um datetimeoffset tipo de dados.
SELECT 
    SYSDATETIME() AS Original,
    CAST(SYSDATETIME() AS datetimeoffset) AS Converted;

Resultado:
+-----------------------------+------------------------------------+
| Original                    | Converted                          |
|-----------------------------+------------------------------------|
| 2018-06-07 10:19:23.9457462 | 2018-06-07 10:19:23.9457462 +00:00 |
+-----------------------------+------------------------------------+

Exemplo 4 – Transmitir SYSDATETIME() como hora


Você não está limitado a exibir o componente de data do valor. Você também pode transmiti-lo como um horário tipo de dados, para que apenas o componente de tempo seja retornado. Assim:
SELECT 
    SYSDATETIME() AS Original,
    CAST(SYSDATETIME() AS time) AS Converted;

Resultado:
+-----------------------------+------------------+
| Original                    | Converted        |
|-----------------------------+------------------|
| 2018-06-07 00:20:21.5829364 | 00:20:21.5829364 |
+-----------------------------+------------------+

Exemplo 5 – Transmitir SYSDATETIMEOFFSET() como data


Aqui está um exemplo usando uma função diferente para gerar o valor de data/hora original:
SELECT 
    SYSDATETIMEOFFSET() AS Original,
    CAST(SYSDATETIMEOFFSET() AS date) AS Converted;

Resultado:
+------------------------------------+----------------------+
| Original                           | Converted            |
|------------------------------------+----------------------|
| 2018-06-07 10:21:16.3617030 +10:00 | 2018-06-07           |
+------------------------------------+----------------------+

Exemplo 6 – Conversão de uma consulta de banco de dados


Aqui está um exemplo de conversão da data recuperada de uma coluna no WideWorldImporters banco de dados de exemplo:
USE WideWorldImporters;
SELECT DISTINCT TOP 10 
    LastEditedWhen, 
    CAST(LastEditedWhen AS date) AS 'Converted'
FROM Sales.CustomerTransactions;

Resultado:
+-----------------------------+-------------+
| 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  |
+-----------------------------+-------------+

Também escrevi um post que mostra como converter entre formatos de data usando o CONVERT() função usando os mesmos exemplos acima.