Programação / Banco de Dados

Trabalhando com Data e Hora no MariaDB: Parte 1

Você sabe como trabalhar com datas e horas no banco de dados? Você sabia que existem funções nativas no banco de dados trabalhar com esse tipo de dado que podem facilitar sua vida?

Por Gustavo Web

Publicado por Gustavo Web
em 10/03/2017 às 18h21

Lista VIP UpInside

Entre para nossa lista VIP e receba vídeo aulas, artigos e tutoriais exclusivos e com prioridade

  QUERO ENTRAR
Compartilhe:

Salve salve galera, Gustavo Web aqui mais uma vez para trazer mais um assunto que acaba sendo um problema para vários desenvolvedores…

Trabalhar com data e hora no banco de dados!

Quantas vezes você já não precisou fazer alguma operação com data e ficou meio perdido em somar ou subtrair dias, meses, anos? Calcular um intervalo entre datas ou horas? Ou ainda calcular se no mês de fevereiro de determinado ano foi bissexto ou não?

Logo quanto comecei a minha carreira na Web, eu desenvolvia aplicações básicas, mas que eu levava centenas de linhas de código a mais, do que hoje posso resolver com apenas uma linha de SQL.

É meu jovem padauan, você não tem noção do tamanho do bloco que eu usava em PHP para saber se tinha ou não o tal do 29 de fevereiro para gerar meus boletos… Quem nunca quebrou a data pelas barras no php, alterou o dia ou o mes e deu um implode novamente, não é da velha guarda.

Bom, para começarmos a por a mão no código primeiro é preciso que você entenda os tipos de campos! No caso temos DATE, TIME, DATETIME, TIMESTAMP e YEAR.

Ahh, vale lembrar que: Por mais que o texto escrito no campo esteja no format correto é obrigatório que o tipo do campo seja um desses mencionados! Ter um campo VARCHAR(255) (que serve para armazenar cadeia de caracter) não funcionará as particularidades que vemos aqui.

Definições de campos:

DATE: Armazena somente a data! E no formato americano, ou seja AAAA-MM-DD aceitando um intervalo de 1000-01-01 (primeiro de janeiro do ano 1000) até 9999-12-31 (31 de dezembro do ano 9999).

TIME: Aceita um intervalo de -838:59:59.999999 até 838:59:59.999999 onde a mascara é HH:MM:SS.ssssss (onde o ‘s’ minúsculo são até 6 casas de microssegundos)!

DATETIME: Aceita o intervalo de data e hora sendo de 1000-01-01 00:00:00.000000 até 9999-12-31 23:59:59:999999.

TIMESTAMP: É o campo que nós mais trabalhamos! Restringe um intervalo de dados mais específicos, possui microssegundos também e no seu formato e possui dois recursos bacana para ajudar a gente no desenvolvimento! (Só para ficar registrado é o DEFAULT CURRENT_TIMESTAMP e o ON UPDATE CURRENT_TIMESTAMP). O intervalo desse campo é 1970-01-01 00:00:01 até 2038-01-19 05:14:07!

YEAR: Quase nunca é utilizado, mas é legal você saber que existe e como funciona! Aqui temos duas opções para trabalhar, tanto com ano com 4 dígitos (2017 por exemplo) ou com 2 dígitos, (17 que será referente a 2017). Quando se trabalha com os 4 dígitos, são aceitos valores de 1901 até 20155 e 0000. No formato de 2 dígitos, os valores aceitos são de 70 até 69 (onde 70 representa 1970 e 69 representa 2069) e o valor 00 refere-se ao ano 2000 (e não 0000 como no caso dos 4 dígitos).

Em quase todos os campos, são aceitos vários formatos para inserção, mas vamos buscar sempre padronizar o tipo de dados que trabalhamos, ok?

Quase que um desencontro de informações!

Na documentação do MariaDB acessando as propriedades do tipo de dado TIMESTAMP, temos a informação de que o maior dado que pode ser incluso é 2038-01-19 05:14:07 conforme pode ser consultado diretamente através desse link! Ao dar uma pesquisada sobre o tal bug 2K38 que cito no vídeo, a informação que se tem é que o limite desse tipo de dado é 2038-01-19 03:14-07, inclusive nesse link você pode encontrar maiores detalhes e a representação gráfica do que ocorre!

Eu de curioso fui testar aqui e o máximo que consegui foi 2038-01-19 01:14:07... Ao tentar adicionar um segundo a mais o valor do campo passa a ser 0000-00-00 00:00:00. Ficou tudo bem confuso né? 2 horas de intervalo entre cada dado, mas a resposta para isso é bem simples! Fuso Horário.

Como disse no vídeo, o timestamp é baseado no UTC, no Brasil temos UTC-2 e por esse motivo, eu não estava conseguindo seguir os dados anteriores! Encontrei a resposta nesse artigo que me parece ser científico da IJEAT (International Journal of Engineering and Advanced Technology) publicado em 2012-10 (para entendedores) que pode ser consultado nesse link

Obs: O link consultado não está mais disponivel, mas de qualquer forma vamos manter ele no artigo caso o arquivo seja substituido pelo criador.

Não acabamos por aqui, em breve vou estar liberado a segunda aula para trabalharmos com adição e subtração de períodos, reescrita da data e ainda como trabalhar com o BETWEEN! Fique de olho para não perder nada, ok?

Para ficar sempre antenado com as novidades da UP, você pode se cadastrar na nossa lista de e-mail e assim que publicarmos novidades eu te aviso!

Me fala o que você achou desse artigo e da vídeo aula, se ela te ajudou de alguma forma, ou ainda se tem alguma dúvida em relação a esses tipos de dados... Eu pessoalmente vou lhe responder :)

Compartilhe:

Em Programação:

Deixe seu comentário: