Postagens

MySQL - Cálculo de período de tempo entre duas datas com TIMESTAMPDIFF

Imagem
Muitas vezes precisamos saber quantos dias se passaram desde que um dado registro entrou no banco de dados ou outros cálculos com datas e horas que precisemos agrupar em dias, meses, horas e etc. Este tipo de informação geralmente é útil nos processos de limpeza e backup de dados mas também em outras situações como a exibição de dados para um usuário. Geralmente este procedimento é delegado ao software que lê o banco de dados e realiza as operações necessárias, seja para backup, limpeza ou exibição de dados. Porém o MySQL possui uma função interessante para efetuar este tipo de procedimento diretamente na query do banco de dados, o que é mais natural já que se trata de um dado. A função TIMESTAMPDIFF() do MySQL calcula o tempo decorrido entre duas datas que pode ser em dias, meses, minutos e etc. A lista completa segue abaixo: FRAC_SECOND (microsegundos), SECOND (segundos), MINUTE (minuto), HOUR (hora), DAY (dia), WEEK (semana), MONTH (mês), QUARTER (trimestre),...

HTML5 - Utilizando a tag cite de maneira correta.

Imagem
Existe muita dúvida sobre o uso da tag <cite>. Alguns sites tem usado a tag <cite> para marcar o nome dos usuários que deixam comentários (por exemplo aqueles que usam o WordPress), outros utilizam a tag para marcar o autor de uma frase ou citação e existem ainda aqueles que usam <cite> para marcar frases e citações. Nos casos descritos acima não é recomenrado o uso da tag <cite>. Na verdade a tag <cite> deve ser utilizada marcar títulos de livros, filmes, obras de arte, músicas, peças de teatro, fotos, jornais, revistas e etc. Para citações e frases podemos usar as tags <blockquote> e <q>. Exemplos corretos: <p>João está lendo <cite>O senhor dos Anéis</cite> enquanto escuta <cite>A Quinta Sinfonia</cite></p> <p>A pintura <cite>Mona Lisa</cite> está no Louvre.</p> Exemplos incorretos: <p><cite>Ser ou não ser, eis a questão</cite> é uma frase de ...

MySQL - Dump de banco de dados sem a estrutura de tabelas

É com certeza uma das práticas mais comuns entre os profissionais que trabalham com banco de dados o backup ou restore de dados. Para isso é muito comum o uso do mysqldump . Em sua configuração padrão o mysqldump , além de copiar os dados da banco também copia toda a estrutura de tabelas e índices. $ mysqldump -uusername -psenha database > /diretorio/backup.sql Porém existem algumas situaçães em que o Dump de uma tabela ou banco não serve apenas para backup. Uma delas, por exemplo, é quando precisamos recriar algum índice novo para a tabela, a fim de melhorar o desempenho. Quem já trabalhou com índices saberá de antemão que lidar com eles em tabelas com milhões de registros, atualizando, trocando, deletando ou criando é um verdadeiro inferno, já que muitas vezes o processo leva horas, quando não dias. Eu mesmo, certa vez, tive que deletar um indice de uma tabela com alguns milhões de registros e me arrependi brutalmente pois levaram 'apenas' 8 horas para o process...

MySQL - Completando quantidades fixas de caracteres com as funções LPAD() e RPAD()

Em PHP temos uma função não tão conhecida, str_pad() , que completa uma string com qualquer caractere até uma quantidade definida pelo programador. Esta função é extremamente útil no caso de codificações padronizadas onde a quantidade de caracteres deve ser sempre fixa. No MySQL temos uma função equivalente chamada LPAD() . A sintaxe desta função é LPAD(CAMPO,QUANTIDADE DE CARACTERES,CARACTERE PARA COMPLETAR) Vamos fazer uma query na tabela exemplo 'produtos' abaixo: cod | nome | valor 3 | Iphone | 3000.00 10 | Blue Ray | 1800.00 230| Book | 30.00 Vamos supor que o padrão de código exigido pelo sistema que lê o banco de dados seja de cinco (5) caracteres. Valores menores que este deverão ser preenchidos com zeros a esquerda SELECT LPAD(cod,5,'0') AS cod, nome,valor FROM produtos Teremos como resultado: cod | nome | valor 000003 | Iphone | 3000.00 000010 | Blue Ray | 1800.00 000230 | Book | 30.00 Assi...

MySQL - Gerando arquivos .csv com cabeçalho e acentuação diretamente de uma query no banco de dados

Já tratamos anteriormente de como gerar um arquivo a partir de uma consulta no MySQL porém não falamos especificamente de arquivos .CSV (aqueles separados por ponto e vírgula e que são reconhecidos diretamente pelos editores de planilha) Além disso não tratamos também de como inserir um cabeçalho com os nomes dos campos e nem como esta saída ser gerada diretamente com acentuação, importante para nós que trabalhamos com o português. Vamos começar com nosso exemplo padrão Para DOS SELECT * INTO OUTFILE 'C:/diretorio/arquivo.txt' FROM tabela Para Linux SELECT * INTO OUTFILE '/diretorio/arquivo.txt' FROM tabela As queries acima geram arquivos com acentuação no padrão UTF8, fora do padrão .csv e sem cabeçalho. Vamos transformar as queries acima para que a saída esteja no padrão .csv SELECT * FROM tabela INTO OUTFILE 'C:/diretorio/arquivo.csv' FIELDS ENCLOSED BY '"' TERMINATED BY ';' ESCAPED BY '"' LIN...

MySQL - Gerando um arquivo externo com o resultado de uma Query pela linha de comando - INTO OUTFILE

Se você necessita que a resposta a uma Query SQL seja gerada em um arquivo basta utilizar a declaração INTO OUTFILE e direcionar o arquivo para o lugar que quiser. O que INTO OUTFILE faz, na verdade, é mudar a saída padrão da tela para um arquivo. Vamos ver os exemplos abaixo: No caso do PROMPT de comando do DOS SELECT * INTO OUTFILE 'C:/diretorio/arquivo.txt' FROM tabela ou no Linux SELECT * INTO OUTFILE '/diretorio/arquivo.txt' FROM tabela Um arquivo com a saída da sua Query está pronto!

MySQL - Fazendo Insert com Subquery

Imagem
Muitas pessoas utilizam scripts PHP para ler dados de uma tabela do DB e jogar em outra porém isso pode ser feito diretamente através do MySQL de maneira muito fácil e muito mais rapidamente. Vamos a um exemplo em que lemos os nomes femininos de uma tabela 'nome' e os referenciamos em uma tabela chamada 'empresarias'. Tabela 'nome' id | nome | genero 1 Pedro m 2 Souza m 3 Santiago m 4 Ana f 5 Rosa f 6 Tom m 7 Tobias m 8 Otavio m 9 Hugo m Tabela 'empresarias' com o campo 'id' AUTO INCREMENT id | id_nome Se fizermos um Select simples da tabela 'nome': SELECT * FROM nome WHERE genero = 'f' Teremos como resultado id | nome | genero 4 Ana f 5 Rosa f Ok, são estes dados que queremos referenciar na tabela 'empresarias'. Como proceder agora? Podemos inserir diretamente os dados de uma tabela em outra u...