À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 xml , grande e sql_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.