3. SQL Server, Datas e Horas: Tipos de dados

Post 3/3. Este post é parte da série: SQL Server: Esclarecendo Datas e Horas
Tempo de leitura estimado: 2 minutos

Salve amigos!

Data e hora no SQL Server pode parecer simples e fácil, principalmente para aqueles que já possuem alguma experiência, seja com administração, seja com desenvolvimento. Entender os principais aspectos de data e hora irão permitir construir scripts melhores e eficientes, além de evitar inconsistências ou surpresas nas aplicações.

Para finalizar esta série, vamos falar sobre os tipos de dado de data. Até o SQL Server 2005 somente dois tipos existiam para trabalhar com data e hora: smalldatetime e datetime. Estes sempre guardam a data e hora juntos. A partir do SQL Server 2008, mais alguns tipos surgiram: date, time, datetime2 e datetimeoffset. Date guarda somente data, gasta menos espaço e abrange uma faixa muito maior. Se você precisar guardar data de aniversário, por exemplo, ele é muito melhor do que o datetime.  O tipo time guarda somente a parte das horas. Além de gastar menos, a precisão das horas é muito maior. Talvez você já tenha percebido isso: o datetime possui uma precisão de cerca de 3,33 milissegundos apenas! Isto significa que… Blá, blá, blá! É melhor você ver na prática:

Tudo isso se deve ao formato como o datetime é armazenado internamente (assunto pra um futuro post). Mas o fato é que isso é uma realidade e tudo isso pode acontecer:

O tipo smalldatetime, tem uma precisão de 1 minuto. A seguinte query mostra a diferença entre os tipos datetime e smalldatetime:

Executando a query acima (SQL 2008 ou superior, devido a cláusula VALUES), você irá perceber que quando os segundos passam são 30 ou superior, a data é arrendondada para o próximo minuto, quando é convertida para smalldatetime.

Já o tipo time tem uma precisão de 100 nanossegundos. O tipo time só armazena tempo, mas se você precisar armazenar data e hora com uma precisão maior, você pode usar o tipo datetime2. Apesar do nome maluco, ele é o tipo recomendando pela Microsoft por estas questões:

Por padrão, estes tipos exibem 7 casas para os milissegundos. Você pode alterar este valor (quanto menor, menos espaço gasta). Você pode consultar a documentação para mais informações:

O tipo datetimeoffset2, além de fazer tudo isso demonstrado acima, ele inclui informações sobre o timezone. Para não ampliar o post, deixarei para falar dele depois. Lembre-se: Você pode obter muito mais informações na documentação do SQL Server. Acesse os links informados acima.

Data e hora são extremamente úteis e saber manipular dentro do SQL Server permite que você incremente suas soluções, melhore o desempenho e evite erros semânticos. Espero que este série possa ter esclarecido melhor. Qualquer coisa utilize os comentários!

Antes de finalizar, você sabe o que significa “Service Principal Name”? Aguarde os próximos posts…

 

[]’s
Navegue na série << 2. SQL Server, Datas e Horas: Exibição e Conversões
Compartilhe este post!

Leave a Reply