Translate

sexta-feira, 14 de janeiro de 2011

Seis dicas para Mysql

Todos  sabemos que no MySQL, podemos montar praticamente qualquer tipo de retorno de informação a partir dos  dados armazenados em suas tabelas, em forma de registros (ou tuplas).  Podemos fazer consultas SELECT com JOIN, WHERE, HAVING para mudar o escopo do resultado de linhas  específicas, usar GROUP BY para combinar resultados, UNION para combinar múltiplas queries. 

Mas também existem casos em que precisamos retornar alguma informação mais comum, utilizada mais frequentemente em nossos sistemas. Vou mostrar agora 6 consultas no MySQL que podem ser úteis para o dia a dia de nossos softwares. 

1 - Idade em anos:

Você tem uma data de aniversário e precisa calcular quantos anos o usuário tem. Vamos assumir que  @datanasc é a data:

SELECT DATE_FORMAT(FROM_DAYS(TO_DAYS(now()) - TO_DAYS(@datanasc)), '%Y') + 0;

2 - Diferença entre duas datas:

Encontre a diferença entre dois valores de datas em segundos, minutos, horas e dias. Se dt1 e dt2 são valores do tipo datetime na forma "yyyy-mm-dd hh:mm:ss', o numero de segundos entre dt1 e dt2 é

UNIX_TIMESTAMP( dt2 ) - UNIX_TIMESTAMP( dt1 )

Para pegar o número de minutos, divida o resultado por 60, para o número de horas, divida por 3600 e para pegar a quantidade de dias, divida por 3600 * 24.

3 - Exiba valores que ocorrem X vezes em uma coluna

SELECT id FROM tbl GROUP BY id HAVING COUNT(*) = N;

4 - Quantidade de dias úteis entre duas datas

SELECT COUNT(*) FROM calendar WHERE d BETWEEN Start AND Stop AND DAYOFWEEK(d)  NOT IN(1,7) AND holiday=0;

5 - Encontre a chave primária da tabela

SELECT k.column_name FROM information_schema.table_constraints t JOIN  information_schema.key_column_usage k USING (constraint_name,table_schema,table_name) WHERE t.constraint_type='PRIMARY KEY' AND t.table_schema='db' AND t.table_name='tbl'  

6 - Veja o tamanho de seu banco de dados

SELECT table_schema AS 'Db Name', Round( Sum( data_length + index_length ) / 1024 / 1024, 3 ) AS  Db Size (MB)', Round( Sum( data_free ) / 1024 / 1024, 3 ) AS 'Free Space (MB)' FROM  information_schema.tables GROUP BY table_schema ;

Nenhum comentário:

Postar um comentário