Database
 sql >> Base de Dados >  >> RDS >> Database

Tipo de dados de data e hora T-SQL

Introdução


Tipos de dados são atributos que especificam o tipo de dados que objetos como colunas, variáveis ​​locais, expressões e parâmetros podem conter. Em todo o mundo RDBMS, os tipos de dados são normalmente agrupados em tipos de dados de string, numéricos e de data.

O T-SQL suporta 6 tipos de dados de data e hora, a saber:
  1. Data e hora
  2. Smalldatetime
  3. Data
  4. Hora
  5. Datahora2
  6. Deslocamento de data e hora

Os dois primeiros tipos de dados são considerados versões legadas dos mais recentes. Neste artigo, nos concentramos nos tipos de dados de data e, especificamente, no datetime e datetime2 tipos de dados disponíveis no SQL Server. A Tabela 1 fornece detalhes dos vários tipos de dados de data e hora disponíveis no SQL Server.

[ID da tabela=59 /]

Guia 1 Tipos de dados de data e hora

Datahora e Datahora2


Datatime é um tipo de dados que combina data com hora em um formato de relógio de 24 horas. O intervalo de datas suportado no tipo de dados datetime é mostrado na guia 1 e tem uma precisão de cerca de 3 milissegundos.

Datetime2 é uma extensão do tipo de dados datetime. Ele acomoda uma faixa mais ampla de valores possíveis e possui uma precisão de 100 nanossegundos, muito melhor que seu antecessor. Outro aspecto importante do tipo de dados dattime2 é que o armazenamento necessário varia de 6 a 8 bytes, dependendo da precisão escolhida.
  • Você pode obter uma precisão de 1 milissegundo permitindo três casas decimais no componente segundos. Cada valor consumirá seis bytes.
  • Você pode obter uma precisão de 100 nanossegundos permitindo sete casas decimais no componente de segundos. Cada valor consumirá oito bytes.

Demonstrações

Inserir valores de data incorretos


Criamos uma tabela com os detalhes mostrados na Listagem 1 para realizar algumas demonstrações que ilustram como manipular o datetime e datetime2 tipos de dados.
-- Listing 1 Create Table and insert Rows
-- Create Table with Data Types
use Practice2017
go
create table staffers (
fname varchar(50),
lname varchar(50),
JobTitle varchar(100),
DOB datetime,
PreciseDOB datetime2,
LastLoginTime time)
go

Em seguida, tentamos preencher a tabela com uma linha conforme mostrado na Listagem 2, mas obtemos o erro mostrado na Fig. 1. A palavra-chave na mensagem de erro é valores “fora do intervalo”. O que está dizendo é que o valor dela que estamos tentando inserir é menor que 01-Jan-1753 ou superior a 31-dez-9999 . Nesse caso, o problema é que não usamos o formato de entrada recomendado de ‘AAAAMMDD hh:mm:ss.nnn ’ (ver Tabela 1). Lendo o valor '06101979 ‘, o SQL Server assume que 0610 é o ano (correspondente a YYYY). Este erro não é gerado para o tipo de dados datetime2 porque o intervalo para datetime2 é mais amplo a partir do ano 0001.
-- Listing 2 Insert Rows with Wrong Entry Format
insert into staffers 
values
(
'Kenneth'
,'Igiri'
,'Database Administrator'
,'06101979'
,'06101979'
,'8:00 AM'
)

Fig. 1 Erro retornado para a coluna de data e hora

Inserir valores de data corretos


Tentamos corrigir o problema inserindo o formato de entrada correto para a coluna datetime conforme mostrado na Listagem 3. Quando executamos a instrução novamente, obtemos o erro mostrado na Fig. 2. Esse erro é causado essencialmente pela mesma falha em seguir as especificações do formato de entrada. No entanto, o problema está na outra parte da data '06101979 ‘ que corresponde ao formato de entrada ‘AAAAMMDD hh:mm:ss.nnn '. Nesse caso, o SQL Server assumiu 19 É um mês e 79 é um dia do mês. A tentativa dessa conversão implícita falha, pois nenhuma das asserções anteriores é verdadeira.
-- Listing 3 Insert Rows with One Correct Entry Format
insert into staffers 
values
(
'Kenneth'
,'Igiri'
,'Database Administrator'
,'19791006'
,'01061979'
,'8:00 AM'
)

Fig. 2 Erro retornado para a coluna Datetime2

A Listagem 4 nos permite demonstrar a última afirmação. O valor 01101201 se encaixa no intervalo para datetime2 e podemos inserir a linha. Este valor se traduz em 1º de dezembro de 0110, como vemos na fig. 3.
-- Listing 4: Insert Rows with Correct Date Format
insert into staffers 
values
(
'Kenneth'
,'Igiri'
,'Database Administrator'
,'19791006'
,'01101201'
,'8:00 AM')
-- Listing 5: Insert Rows with All Correct Entry Format
insert into staffers 
values
(
'Kenneth'
,'Igiri'
,'Database Administrator'
,'19791006'
,'19791006'
,'8:00 AM'
)

Verificando os dados


Fig. 3 Consultando o conjunto de dados

Quando consultamos a tabela staffers vemos claramente a precisão do tipo de dados datetime quando comparado com a alternativa datetime2. Vamos passar para algo um pouco mais sinistro:configurações de idioma. Dê uma olhada na Listagem 6. Estamos inserindo exatamente os mesmos registros usando o formato de data 06/10/1979 . Este formato NÃO é neutro em termos de idioma, portanto, quando definimos o idioma como britânico na primeira instrução e depois para us_english no segundo, descobrimos que inserimos duas datas diferentes, embora nossos valores brutos sejam os mesmos. É por isso que é tão importante sempre usar o formato de entrada recomendado ao lidar com datetime e datetime2 .
-- Listing 6: Impact of Language Settings

set language british
insert into staffers 
values
(
'Kenneth'
,'Igiri'
,'Database Administrator'
,'06/10/1979'
,'06/10/1979'
,'8:00 AM'
)


set language us_english
insert into staffers 
values
(
'Kenneth'
,'Igiri'
,'Database Administrator'
,'06/10/1979'
,'06/10/1979'
,'8:00 AM'
)

Fig. 4 Consultando Funcionários

Com a configuração de idioma como britânico , o SQL Server interpreta os dois primeiros números como o dia, mas com a configuração de idioma como us_english , o SQL Server interpreta os dois primeiros números como um mês. Uma última coisa que precisamos mencionar aqui é que, ao inserir nossos registros, não especificamos o componente de hora, portanto, o SQL Server assume automaticamente que era meia-noite média da data especificada.

Conclusão


Neste artigo, aprendemos como são os tipos de dados datetime e datetime2, suas principais diferenças e como garantir que você esteja inserindo a data correta ao usar esses tipos de dados. No decorrer dele, também examinamos dois erros que um desenvolvedor pode encontrar ao trabalhar com esses tipos de dados.

Referências

  • Tipos de dados SQL
  • Ben-Gan, I. (2016) Fundamentos de T-SQL. pp74-78. Imprensa da Microsoft.