Entendendo as funções MySQL

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ção Descrição
%d Dia do mês numérico(00..31)
%D Dia do mês com sufixo (em Inglês)
%m Mês, numérico(00..12)
%M Nome do Mês(em Inglês)
%y Ano, numérico (dois dígitos)
%Y Ano, 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.

Links Úteis

Saiba mais sobre Mobile ;)

  • Tutorial de MySQL:
    Conheça desde o básico até o avançado no MySQL, entenda suas funções e como suas aplicações podem decolar com este banco de dados.
  • PHP: Declaração e atribuição de variáveis:
    Neste documento você encontrará o conteúdo que precisa para aprender a declarar e utilizar variáveis na linguagem PHP. É por meio das variáveis que conseguimos guardar os dados em memória e acessá-los quando necessário.
  • Serialização: como funciona o processo no PHP:
    Serialização tem como principal objetivo transformar um objeto em uma forma binária ou em formato de texto para poder transmiti-lo via rede ou armazenar seu conteúdo sem perda de dados. Veja como funciona o processo de serialização no PHP.