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

Como converter de um formato de data para outro no SQL Server usando CONVERT()


Às vezes, ao trabalhar com bancos de dados e outros ambientes de programação, você obtém um valor de data, mas está no formato/tipo de dados incorreto. Por exemplo, se uma data foi gerada com uma função de data embutida, ela pode incluir a data e a hora, até o último nanossegundo. E tudo que você quer é o dia, mês e ano, diga assim:2018-01-01.

Se isso acontecer enquanto você estiver usando o SQL Server, use o CONVERT() função para convertê-lo para outro tipo de dados. Quando você fizer isso, o tipo de dados determinará o formato em que aparece.

Este artigo fornece exemplos de uso do CONVERT() função no SQL Server para converter um valor de data em outro tipo de dados (data).


Sintaxe


Primeiro, veja como funciona a sintaxe oficial:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

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 .
style
Uma expressão inteira que especifica como CONVERT() função traduzirá expressão . Para um valor de estilo de NULL, NULL é retornado. data_type determina o intervalo.

Exemplo 1 – Converter de SYSDATETIME() para data tipo de dados


Neste exemplo, geramos a data/hora atual com o SYSDATETIME() função e converta isso em 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,
    CONVERT(date, SYSDATETIME()) AS Converted;

Resultado:
+-----------------------------+-------------+
| Original                    | Converted   |
|-----------------------------+-------------|
| 2018-06-06 22:53:47.2318751 | 2018-06-06  |
+-----------------------------+-------------+

Exemplo 2 – Converter de SYSDATETIME() para tipo de dados smalldatetime


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

Resultado:
+-----------------------------+---------------------+
| Original                    | Converted           |
|-----------------------------+---------------------|
| 2018-06-06 22:56:51.6873250 | 2018-06-06 22:57:00 |
+-----------------------------+---------------------+

Exemplo 3 – Converter de SYSDATETIME() para tipo de dados datetimeoffset


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

Resultado:
+-----------------------------+------------------------------------+
| Original                    | Converted                          |
|-----------------------------+------------------------------------|
| 2018-06-07 09:17:15.2410693 | 2018-06-07 09:17:15.2410693 +00:00 |
+-----------------------------+------------------------------------+

Exemplo 4 – Converter de SYSDATETIME() para tipo de dados time


Você não está limitado a exibir o componente de data do valor. Você também pode convertê-lo em uma hora tipo de dados, para que apenas o componente de tempo seja retornado. Assim:
SELECT 
    SYSDATETIME() AS Original,
    CONVERT(time, SYSDATETIME()) AS Converted;

Resultado:
+-----------------------------+------------------+
| Original                    | Converted        |
|-----------------------------+------------------|
| 2018-06-06 23:01:41.7070775 | 23:01:41.7070775 |
+-----------------------------+------------------+

Exemplo 5 – Converter de SYSDATETIMEOFFSET()


Todos os exemplos anteriores usam a mesma função embutida para gerar o valor de data/hora, mas é claro que não precisa ser gerado por essa função. Aqui está um exemplo usando o SYSDATETIMEOFFSET() :
SELECT 
    SYSDATETIMEOFFSET() AS Original,
    CONVERT(date, SYSDATETIMEOFFSET()) AS Converted;

Resultado:
+------------------------------------+----------------------+
| Original                           | Converted            |
|------------------------------------+----------------------|
| 2018-06-07 09:12:27.3660685 +10:00 | 2018-06-07           |
+------------------------------------+----------------------+

Exemplo 6 – Converter de uma consulta de banco de dados


Aqui está um exemplo de conversão da data que é recuperada de uma coluna no banco de dados de exemplo WideWorldImporters:
USE WideWorldImporters;
SELECT DISTINCT TOP 10 
    LastEditedWhen, 
    CONVERT(date, LastEditedWhen) 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  |
+-----------------------------+-------------+

Observe que você não está limitado a apenas converter entre dois formatos de data diferentes. Se você tiver uma data armazenada como uma string, por exemplo, também poderá usar CONVERT() para converter de uma string para uma data, bem como qualquer outro tipo de dados para o qual você possa precisar converter.

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