Desenvolvedor e Analista de Sistemas | IFPA

sexta-feira, 15 de agosto de 2014

Aprenda utilizar datas no MySQL

com 0 Comentário

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 pretendemos 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 possibilidade de algumas dessas funções não funcionarem.

+1

0 comentários :

Postar um comentário

Total de visualizações