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

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

Tentaremos alterar o Tipo de Dados para tempo reduzido:

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:

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:

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:

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:

Para o formato britânico:

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:

Usamos substring para concatenar o “-” para usar um formato de data aceitável e depois usamos a função CONVERT para converter os caracteres para sql date.

Data tipos de dados

No SQL Server, existem vários tipos de datatypes:

  • Tempo retorna as horas, minutos, segundos e nanossegundos (hh:mm:ss.nnnnnnnn)
  • Data retorna o ano, meses e dias (aaaaa-mm-dd)
  • Data retorna os dados com este formato: AAAAA-MM-DD hh:mm:ss
  • Data de devolução de hora pequena com este formato: AAAA-MM-DD hh:mm:ss
  • Datetime2 é semelhante a Datetime, mas tem mais precisão (AAAA-MM-DD hh:mm:ss)
  • Datetimeoffset tem a precisão de Datetime2, mas é usado para fusos horários no UTC

SQL converter data para inteiro

Se você usar o CONVERT ou CAST para converter uma datatime para inteiro, ele retornará o número de dias desde 1900 até a data fornecida.

Por exemplo, o seguinte código T-SQL mostrará o número de dias desde 1900 até hoje:

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
Daniel Calbimonte é um Microsoft Most Valuable Professional, Microsoft Certified Trainer e Microsoft Certified IT Professional for SQL Server. Ele é um autor SSIS realizado, professor em Academias de TI e tem mais de 13 anos de experiência trabalhando com diferentes bancos de dados.
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

>Perguntas mais recentes de Daniel Calbimonte (ver todos)
  • 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

Deixe uma resposta

O seu endereço de email não será publicado.