Funções de manipulação de data do MySQL 5.5

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (6)  (0)

Veja neste artigo as várias funções que o MySQL 5.5 oferece para manipular datas internamente no banco, sem a necessidade controlar na aplicação.

Olá pessoal, neste artigo vou demostrar algumas funções que o SGBD MySQL nos fornece para manipularmos datas internamente no banco usando SQL, geralmente efetuamos esse tipo de tratamento internamente na aplicação, independente da linguagem que esteja sendo desenvolvida.

Nesse artigo vou usar o MySQL 5.5.13, sem nenhum tipo de interface gráfica para gerenciamento, vamos acessar o MySQL através do prompt de comando do próprio Windows 7.

Para iniciar o prompt basta clicar em EXECUTAR e digitar “cmd” ou vá até acessórios e selecione a opção correspondente.

Para iniciar MySQL via prompt basta digitar: “mysql –u <seu_usuário> -p <sua_senha>”

Imagem inicial de acesso ao MySQL via prompt

Figura 1: Imagem inicial de acesso ao MySQL via prompt

Vamos começar demonstrando como retornar a data atual do servidor, podemos usar a função CURDATE() ou CURRENT_DATE(). Digite no prompt a seguinte instrução:

Listagem 1: Instrução SQL para retornar data atual do servidor

SELECT CURDATE();
ou
SELECT CURRENT_DATE();
Retorno das duas funções

Figura 2: Retorno das duas funções

Podemos aproveitar esse retorno “2012-08-2012” para demonstrar outra função muito interessante. A função “DATE_FORMAT()” que recebe dois parâmetros(<data_para_formatar>, <formato_desejado>) e tem a finalidade de alterar o formato da data, geralmente trabalhamos com datas nesse formato “MM/DD/AAAA”. Podemos alterar esse retorno da seguinte maneira.

Listagem 2: Instrução SQL DATE_FORMAT()

SELECT DATE_FORMAT(CURDATE() ‘%d/%m/%Y’);
Data atual formatada no padrão nacional

Figura 3: Data atual formatada no padrão nacional

Observações:O parâmetro “%” é obrigatório antes de informar os caracteres de formato. Abaixo seguem alguns formatos aceitos:

EspecificaçãoDescrição
%dDia do mês numérico(00..31)
%DDia do mês com sufixo (em Inglês)
%mMês, numérico(00..12)
%MNome do Mês(em Inglês)
%yAno, numérico (dois dígitos)
%YAno, quatro dígitos numéricos

No site oficial do MySQL existe uma tabela com vários outros formatos aceitos, inclusive formatos do tipo time, para formatar horas, minutos e segundos.

Outra função muito útil é a “EXTRACT()”, com ela podemos extrair várias informações sobre a data passada como parâmetro. Para usar a função “EXTRACT()” temos que passar 2 parâmetros:

  • Tipo de informação que desejamos que a função retorne: DAY(Dia), MONTH(Mês) e YEAR(Ano) entre outros.
  • Data que será extraída as informações.

Nesse exemplo vou fragmentar a data retornada pela função CURDATE() em dia , mês e ano.

Listagem 3: Fragmentando a data atual em dia, mês e ano.

SELECT EXTRACT(DAY FROM CURDATE()) AS DIA, EXTRACT(MONTH FROM CURDATE()) AS MES, EXTRACT(YEAR FROM CURDATE()) AS ANO;
Data atual fragmentada em dia, mês e ano

Figura 4: Data atual fragmentada em dia, mês e ano

Agora vamos adicionar uma determinada quantidade de dias para uma determinada data, nesse caso estamos sempre capturando a data atual do servidor. Vamos usar a função “DATE_ADD()” que recebe dois parâmetros, o primeiro é a data à qual desejamos acrescentar os dias e o segundo é a quantidade de dias que prentendemos adicionar. No segundo parâmetro usamos além da quantidade de dias, duas palavras reservadas “INTERVAL <Quantidade de dias> DAY”. Nesse exemplo vou adicionar 30 dias na data “2012-08-21”.

Listagem 4: Adicionando 30 dias à data passada como parâmetro.

SELECT DATE_ADD(CURDATE(), INTERVAL 30 DAY));
Data acrescida de 30 dias

Figura 5: Data acrescida de 30 dias

No próximo exemplo vou demosntrar a função “DATEDIFF()”, com ela podemos encontrar a diferença em dias entre duas datas através da subtração. Essa função recebe as duas datas que desejamos subtrair como parâmetros.

Listagem 5: Encontrando a diferença em dias entre 2 datas.

SELECT DATEDIFF('2012-08-21', '2012-08-05'); 

Observação: notem que as datas são informadas no padrão americano, YYYY-MM-DD com separador “-“, de outro modo não funciona.

Diferença entre as datas, o resultado foi 16 dias

Figura 6: Diferença entre as datas, o resultado foi 16 dias

Podemos também encontrar a diferença entre duas datas em meses, usando a função “PERIOD_DIFF()” e passando duas datas no formato “YYMM” ou “YYYYMM” como parâmetro, não é aceito o uso de separadores “-“.

Listagem 6: Encontrando a diferença em meses entre 2 datas.

SELECT PERIOD_DIFF(‘201212’, ‘201208’); 
Diferença entre as datas, o resultado foi 4 meses

Figura 7: Diferença entre as datas, o resultado foi 4 meses

Para finalizar, vou demonstrar a função “DAYOFYEAR()”, ela retorna o dia do ano (1-366), temos que passar uma data no formato YYYY-mm-dd como parâmetro.

Listagem 7: Encontrando o dia do ano.

SELECT DAYOFYEAR(‘2012-08-21’); 
Dia do ano a partir da data passada como parâmetro

Figura 8: Dia do ano a partir da data passada como parâmetro

Bom pessoal, neste artigo demonstrei apenas algumas das várias funções que o MySQL oferece para se manipular datas, infelizmente para demonstrar todas as funções seriam necessários vários artigos. Para o leitor que tiver a curiosidade de conhecer todas ou a maioria, visite o site: http://dev.mysql.com/doc/refman/5.5/en/. Esse artigo foi baseado no manual da versão 5.5 do MySQL, em versões anteriores existe a possiblidade de algumas dessas funções não funcionarem.

Espero que tenham apreciado e até a próxima.

Caso surja alguma dúvida meu e-mail é wllfl@ig.com.br. Fiquem à vontade também para usar a seção de comentários.

Abraço a todos!

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?