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