Postagens

Mostrando postagens de agosto, 2014

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...