SQLShack
Introdução
Uma tarefa comum para iniciantes é aprender como fazer um SQL converter data e trabalhar para convertê-los data para outros tipos de dados ou encobrir outros tipos de dados para Data.
Aqui neste artigo vamos explicar como trabalhar e converter datas para diferentes formatos ou vice-versa.
Requisitos
- SQL Server instalado. Começando no SQL Server 2008
Exemplo
O primeiro exemplo será simples, temos uma coluna varchar com uma data em uma tabela, mas precisamos converter o varchar para data. Precisamos fazer uma data de conversão SQL.
Aqui está o script para criar a tabela com dados:
1
2
3
4
5
6
7
9
10
11
12
|
CRIAR TABELA .(
> NÃO NULO,
(100) NULO,
RESTRIÇÃO CLUSTER DE CHAVE PRIMÁRIA
(
ASC
)COM (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) EM
) EM
GO
INSERIR . (, ) VALORES (1, N’02-03-2005′)
> INSERIR . (, ) VALORES (2, N’03-05-2006′)
> INSERIR . (, ) VALORES (3, N’04-05-2011′)
|
Queremos converter a data da coluna de nvarchar(100) para uma data.
Para o fazer, vamos tentar modificar o desenho da tabela:
![](https://www.sqlshack.com/wp-content/uploads/2019/04/ssms-design-table.png)
Tentaremos alterar o Tipo de Dados para tempo reduzido:
![](https://www.sqlshack.com/wp-content/uploads/2019/04/change-varchar-to-smalldatime-in-ssms.png)
Você receberá a seguinte mensagem de erro:
Não é permitido guardar alterações. As alterações que você fez requerem que as seguintes tabelas sejam descartadas e recriadas. Você fez alterações em uma tabela que não pode ser recriada ou ativou a opção Prevenir alterações de salvamento que requerem que a tabela seja recriada.
Para resolver este erro, em SSMS vá para Ferramentas > Menu Opções:
![](https://www.sqlshack.com/wp-content/uploads/2019/04/change-options-in-ssms.png)
Em Opções, vá para Designers >Table and Database Designers e desmarque a opção Prevenir alterações de salvamento que requerem que a tabela seja recriada:
![](https://www.sqlshack.com/wp-content/uploads/2019/04/uncheck-prevent-saving-changes-that-require-table.png)
Esta opção irá desabilitar a opção para evitar salvar a recriação da tabela. Quando você modifica o tipo de dados da coluna, requer a recriação da tabela.
Agora, você pode salvar o design e sua tabela será convertida para data e a data de conversão SQL é completada:
![](https://www.sqlshack.com/wp-content/uploads/2019/04/sql-convert-date-date-time-results-after-convert.png)
Funções de conversão
T-SQL contém funções para converter tipos de dados. Vamos usar CAST e CONVERT para fazer uma data de conversão SQL.
Vamos começar com CAST primeiro:
Como converter de varchar, nvarchar, char, nchar para sql data usando CAST
O exemplo seguinte, mostrará como converter caracteres para um tipo de data/hora usando a função CAST:
1
2
|
declarar @vardate varchar(100)=’03-04-2016′
selecionar CAST(@vardate AS datetime) AS dataconverted;
|
O exemplo declara uma variável chamada vardate e então esta variável que é um varchar é convertida para datetime usando a função CAST.
Nota: Para mais informações sobre a função CAST, consulte este link: CAST e CONVERT (Transact-SQL)
Como fazer uma conversão SQL de data de varchar, nvarchar, char, nchar para data usando CONVERT
CONVERT é uma função que pode fazer o mesmo que CAST no cenário anterior.
1
2
|
declarar @vardate varchar(100)=’03-04-2016′
selecionar CONVERT(datetime, @vardate) como dataconverted
|
O código T-SQL está a fazer o mesmo que o fundido, mas está a usar a função CONVERT. A vantagem do CONVERT é que você pode mudar facilmente o formato da data usando o argumento de estilo.
Por exemplo, se você quiser a data no formato ISO, você pode usar a seguinte frase T-SQL:
1
|
selecione CONVERT(nvarchar(30),get date(), 121) como isoformato
|
Como converter data sql em diferentes formatos em T-SQL
O exemplo seguinte mostra como converter o formato da data em diferentes formatos.
Para formato japonês:
1
|
seleccione CONVERT(nvarchar(30),getdate(), 111) como formato japonês
|
Para formato americano:
1
|
seleccione CONVERT(nvarchar(30),getdate(), 110) como formato USA
|
Para o formato ANSI:
1
|
selecione CONVERT(nvarchar(30),getdate(), 102) como ANSIformat
|
1
|
>
selecione CONVERT(nvarchar(30),getdate(), 103) como formato britânico
|
Para o formato alemão:
1
|
>
selecione CONVERT(nvarchar(30),getdate(), 104) como formato alemão
|
Para o formato italiano:
1
|
>
selecione CONVERT(nvarchar(30),getdate(), 105) como formato italiano
|
Para o formato europeu padrão:
1
|
>
seleccione CONVERT(nvarchar(30),getdate(), 113) como EuropeDefaultformat
|
Para ODBC Canonical:
1
|
>
seleccione CONVERT(nvarchar(30),getdate(), 120) como ODBCCanonicalformat
|
Tem sempre a opção de utilizar a função FORMATO para obter a data no formato que pretende:
1
|
> SELECT FORMAT( getdate(), ‘dd/MM/yyy’)
|
FORMAT é mais fácil de lidar com datas e usar o formato de sua preferência, porque você não precisa conhecer o estilo. No entanto, na minha experiência eu vejo muito código usando as funções CAST e CONVERT, então é melhor conhecê-los.
Note: Para mais informações sobre a função FORMATO, consulte este link: FORMAT (Transact-SQL)
Problemas relacionados com operações de conversão de data SQL
Quando se tenta converter para data nem sempre é possível. O exemplo seguinte mostra um erro comum:
1
2
|
declarar @vardate varchar(100)=’11242016′
seleccionar CONVERT(datetime, @vardate) como dataconverted
|
A mensagem de erro é a seguinte:
Msg 242, Nível 16, Estado 3, Linha 22
A conversão de um tipo de dados varchar para um tipo de dados de data e hora resultou num valor fora da faixa de variação.
Necessita de separadores para a data como um “/”, um “.” ou um “-“.
O exemplo seguinte, modifica a string de 11242016 para 11-24-2016 e depois converte para data sql:
1
2
3
4
5
|
declarar @vardate varchar(100)=’11242016′
set @vardate= SUBSTRING(@vardate, 1, 2)+’-‘+ SUBSTRING(@vardate, 3, 2)+’-‘+SUBSTRING(@vardate, 5, 4)
seleccione CONVERT(date, @vardate) como dataconverted
|
1
|
SELECT CONVERT(INT, GETDATE())
|
Também pode converter para inteiro o ano, meses, dias, etc. de um valor de data/hora. O seguinte código mostra como armazenar em variáveis inteiras o dia, mês e ano de um valor de data/hora:
1
2
3
4
5
|
declarar @year int = ano(get date())
declare @month int = month(getdate())
declare @day int = day(getdate())
seleccione @ano como ano,@mês como mês,@dia como dia
|
Perguntas Comuns sobre a data de conversão SQL no SQL Server
Nota: O seguinte link contém FAQ sobre funções e datas no SQL Server: FAQ sobre datas no SQL Server
Conclusões
Neste artigo, aprendemos como fazer uma conversão de data SQL no SQL Server. Aprendemos como modificar o tipo de dados em uma tabela, como usar as funções CAST, CONVERT e FORMAT. Também aprendemos sobre os diferentes tipos de dados SQL.
- Autor
- Posts recentes
![](https://s33046.pcdn.co/wp-content/uploads/gravatar/danielcalbimonte.jpg)
Ele tem trabalhado para o governo, empresas petrolíferas, web sites, revistas e universidades ao redor do mundo. Daniel também fala regularmente em conferências e blogs de SQL Servers. Ele escreve materiais de treinamento em SQL Server para exames de certificação.
Ele também ajuda na tradução de artigos SQLShack para o espanhol
Veja todos os posts de Daniel Calbimonte
![](https://s33046.pcdn.co/wp-content/uploads/gravatar/danielcalbimonte.jpg)
- Perguntas de entrevista SQL – 3 de setembro, 2020
- Certificações SQL – 7 de Agosto de 2020
- História do TSQL – 3 de Setembro de 2019