Introdução ao MySQL
<p><br>
<font color=\"#003366\"><span class=\"negrito\">Cálculos de Data</span></font></p>
<p>MySQL fornece várias funções que pode fazer cálculos
em datas, por exemplo, para calcular idades ou extrair partes das datas.
<br>
Para determinar quantos anos tem seus animais de estimação,
ele pega a diferença entre a data de nascimento e a data corrente.
Converte as duas datas para dias, tomam a diferença, e divide por
365 (o número de dias em um ano): </p>
<p class=\"mysql\">mysql> SELECT name, (TO_DAYS(NOW())-TO_DAYS(birth))/365
FROM pet;<br>
+----------+-------------------------------------+<br>
| name | (TO_DAYS(NOW())-TO_DAYS(birth))/365 |<br>
+----------+-------------------------------------+<br>
| Fluffy | 6.15 |<br>
| Claws | 5.04 |<br>
| Buffy | 9.88 |<br>
| Fang | 8.59 |<br>
| Bowser | 9.58 |<br>
| Chirpy | 0.55 |<br>
| Whistler | 1.30 |<br>
| Slim | 2.92 |<br>
| Puffball | 0.00 |<br>
+----------+-------------------------------------+</p>
<p>Há algumas coisas que podem ser melhoradas. Primeiro, o resultado
pode ser examinado mais facilmente se as filas que forem apresentadas
em alguma ordem. Segundo, o título da coluna de idade não
está significativo. <br>
O primeiro problema pode ser tratado por inserindo a cláusula ORDER
BY ao nome, para classificar a saída por nome. Para lidar com o
título da coluna, fornece um nome à coluna de modo que um
rótulo diferente apareça na saída (isto é
chamado de apelido da coluna): </p>
<p class=\"mysql\">mysql> SELECT name, (TO_DAYS(NOW())-TO_DAYS(birth))/365
AS age<br>
-> FROM pet ORDER BY name;<br>
+----------+------+<br>
| name | age |<br>
+----------+------+<br>
| Bowser | 9.58 |<br>
| Buffy | 9.88 |<br>
| Chirpy | 0.55 |<br>
| Claws | 5.04 |<br>
| Fang | 8.59 |<br>
| Fluffy | 6.15 |<br>
| Puffball | 0.00 |<br>
| Slim | 2.92 |<br>
| Whistler | 1.30 |<br>
+----------+------+</p>
<p>Para classificar a saída por idade em vez de nome, somente use
a cláusula ORDER BY: </p>
<p class=\"mysql\">mysql> SELECT name, (TO_DAYS(NOW())-TO_DAYS(birth))/365
AS age<br>
-> FROM pet ORDER BY age;<br>
+----------+------+<br>
| name | age |<br>
+----------+------+<br>
| Puffball | 0.00 |<br>
| Chirpy | 0.55 |<br>
| Whistler | 1.30 |<br>
| Slim | 2.92 |<br>
| Claws | 5.04 |<br>
| Fluffy | 6.15 |<br>
| Fang | 8.59 |<br>
| Bowser | 9.58 |<br>
| Buffy | 9.88 |<br>
+----------+------+</p>
<p>Uma pergunta parecida pode ser utilizada para determinar a idade dos
animais quando morreram. Você determina os animais que já
morreram, checa, não importando se o valor de morte é NULL
e para valores não NULOS, computam a diferença entre valores
de morte e valores de nascimento: </p>
<p class=\"mysql\">mysql> SELECT name, birth, death, (TO_DAYS(death)-TO_DAYS(birth))/365
AS age<br>
-> FROM pet WHERE death IS NOT NULL ORDER BY age;<br>
+--------+------------+------------+------+<br>
| name | birth | death |
age |<br>
+--------+------------+------------+------+<br>
| Bowser | 1989-08-31 | 1995-07-29 | 5.91 |<br>
+--------+------------+------------+------+</p>
<p>A pergunta usa morte IS NOT NULL em vez de morte != NULL porque NULL
é um valor especial. Se você deseja saber que animais têm
aniversários no próximo mês? Para este tipo de cálculo,
ano e dia são irrelevantes, você simplesmente deseja extrair
o mês da coluna de nascimento. MySQL fornece várias funções
do extração de partes da data, tal como YEAR(), MONTH()
and DAYOFMONTH(). MONTH() é a função apropriada aqui.
Para ver como isto trabalha, faz uma pergunta simples que exibe o valor
de ambos data de nascimento e mês(nascimento): </p>
<p class=\"mysql\">mysql> SELECT name, birth, MONTH(birth) FROM pet;<br>
+----------+------------+--------------+<br>
| name | birth |
MONTH(birth) |<br>
+----------+------------+--------------+<br>
| Fluffy | 1993-02-04 | 2 |<br>
| Claws | 1994-03-17 | 3 |<br>
| Buffy | 1989-05-13 | 5 |<br>
| Fang | 1990-08-27 | 8 |<br>
| Bowser | 1989-08-31 | 8 |<br>
| Chirpy | 1998-09-11 | 9 |<br>
| Whistler | 1997-12-09 | 12 |<br>
| Slim | 1996-04-29 | 4 |<br>
| Puffball | 1999-03-30 | 3 |<br>
+----------+------------+--------------+</p>
<p>Descobrindo animais com aniversários no próximo mês
é fácil, também. Suponha o mês corrente é
abril. Então o valor de mês é 4 e você espera
animais nascidos no mês de maio (mês 5): </p>
<p class=\"mysql\">mysql> SELECT name, birth FROM pet WHERE MONTH(birth)
= 5;<br>
+-------+------------+<br>
| name | birth |<br>
+-------+------------+<br>
| Buffy | 1989-05-13 |<br>
+-------+------------+</p>
<p>Há uma pequena complicação se o mês corrente
é dezembro. Você não faz somente a soma do número
do mês (12) e espera animais produzidos em mês 13, porque
não há tal mês. Você espera animais produzidos
em janeiro (mês 1). <br>
Você pode até mesmo escrever a pergunta de modo que isto
trabalhe com nenhuma matéria do mês corrente. Aquele caminho
que você não tem que usar um número de mês particular
na pergunta. DATE_ADD() permite você somar um intervalo do tempo
para uma data dada. Se você soma um mês ao valor de NOW(),
então o mês desfaz-se MONTH(), o resultado produzido é
o mês em que esperávamos os aniversários: </p>
<p class=\"mysql\">mysql> SELECT name, birth FROM pet<br>
-> WHERE MONTH(birth) = MONTH(DATE_ADD(NOW(), INTERVAL 1 MONTH));</p>
<p>Um caminho diferente para efetuar a mesma tarefa é somar 1 para
obter o próximo mês depois o mês corrente: </p>
<p class=\"mysql\">mysql> SELECT name, birth FROM pet<br>
-> WHERE MONTH(birth) = MOD(MONTH(NOW()), 12) + 1;</p>
<p>Note que MÊS volta um número entre 1 e 12. e MOD(alguma
coisa,12) volta um número entre 0 e 11. Assim a adição
tem que estar depois de MOD() de outra maneira nós poderíamos
ir de Novembro (11) para Janeiro (1). </p>
<font color=\"#003366\"><span class=\"negrito\">Cálculos de Data</span></font></p>
<p>MySQL fornece várias funções que pode fazer cálculos
em datas, por exemplo, para calcular idades ou extrair partes das datas.
<br>
Para determinar quantos anos tem seus animais de estimação,
ele pega a diferença entre a data de nascimento e a data corrente.
Converte as duas datas para dias, tomam a diferença, e divide por
365 (o número de dias em um ano): </p>
<p class=\"mysql\">mysql> SELECT name, (TO_DAYS(NOW())-TO_DAYS(birth))/365
FROM pet;<br>
+----------+-------------------------------------+<br>
| name | (TO_DAYS(NOW())-TO_DAYS(birth))/365 |<br>
+----------+-------------------------------------+<br>
| Fluffy | 6.15 |<br>
| Claws | 5.04 |<br>
| Buffy | 9.88 |<br>
| Fang | 8.59 |<br>
| Bowser | 9.58 |<br>
| Chirpy | 0.55 |<br>
| Whistler | 1.30 |<br>
| Slim | 2.92 |<br>
| Puffball | 0.00 |<br>
+----------+-------------------------------------+</p>
<p>Há algumas coisas que podem ser melhoradas. Primeiro, o resultado
pode ser examinado mais facilmente se as filas que forem apresentadas
em alguma ordem. Segundo, o título da coluna de idade não
está significativo. <br>
O primeiro problema pode ser tratado por inserindo a cláusula ORDER
BY ao nome, para classificar a saída por nome. Para lidar com o
título da coluna, fornece um nome à coluna de modo que um
rótulo diferente apareça na saída (isto é
chamado de apelido da coluna): </p>
<p class=\"mysql\">mysql> SELECT name, (TO_DAYS(NOW())-TO_DAYS(birth))/365
AS age<br>
-> FROM pet ORDER BY name;<br>
+----------+------+<br>
| name | age |<br>
+----------+------+<br>
| Bowser | 9.58 |<br>
| Buffy | 9.88 |<br>
| Chirpy | 0.55 |<br>
| Claws | 5.04 |<br>
| Fang | 8.59 |<br>
| Fluffy | 6.15 |<br>
| Puffball | 0.00 |<br>
| Slim | 2.92 |<br>
| Whistler | 1.30 |<br>
+----------+------+</p>
<p>Para classificar a saída por idade em vez de nome, somente use
a cláusula ORDER BY: </p>
<p class=\"mysql\">mysql> SELECT name, (TO_DAYS(NOW())-TO_DAYS(birth))/365
AS age<br>
-> FROM pet ORDER BY age;<br>
+----------+------+<br>
| name | age |<br>
+----------+------+<br>
| Puffball | 0.00 |<br>
| Chirpy | 0.55 |<br>
| Whistler | 1.30 |<br>
| Slim | 2.92 |<br>
| Claws | 5.04 |<br>
| Fluffy | 6.15 |<br>
| Fang | 8.59 |<br>
| Bowser | 9.58 |<br>
| Buffy | 9.88 |<br>
+----------+------+</p>
<p>Uma pergunta parecida pode ser utilizada para determinar a idade dos
animais quando morreram. Você determina os animais que já
morreram, checa, não importando se o valor de morte é NULL
e para valores não NULOS, computam a diferença entre valores
de morte e valores de nascimento: </p>
<p class=\"mysql\">mysql> SELECT name, birth, death, (TO_DAYS(death)-TO_DAYS(birth))/365
AS age<br>
-> FROM pet WHERE death IS NOT NULL ORDER BY age;<br>
+--------+------------+------------+------+<br>
| name | birth | death |
age |<br>
+--------+------------+------------+------+<br>
| Bowser | 1989-08-31 | 1995-07-29 | 5.91 |<br>
+--------+------------+------------+------+</p>
<p>A pergunta usa morte IS NOT NULL em vez de morte != NULL porque NULL
é um valor especial. Se você deseja saber que animais têm
aniversários no próximo mês? Para este tipo de cálculo,
ano e dia são irrelevantes, você simplesmente deseja extrair
o mês da coluna de nascimento. MySQL fornece várias funções
do extração de partes da data, tal como YEAR(), MONTH()
and DAYOFMONTH(). MONTH() é a função apropriada aqui.
Para ver como isto trabalha, faz uma pergunta simples que exibe o valor
de ambos data de nascimento e mês(nascimento): </p>
<p class=\"mysql\">mysql> SELECT name, birth, MONTH(birth) FROM pet;<br>
+----------+------------+--------------+<br>
| name | birth |
MONTH(birth) |<br>
+----------+------------+--------------+<br>
| Fluffy | 1993-02-04 | 2 |<br>
| Claws | 1994-03-17 | 3 |<br>
| Buffy | 1989-05-13 | 5 |<br>
| Fang | 1990-08-27 | 8 |<br>
| Bowser | 1989-08-31 | 8 |<br>
| Chirpy | 1998-09-11 | 9 |<br>
| Whistler | 1997-12-09 | 12 |<br>
| Slim | 1996-04-29 | 4 |<br>
| Puffball | 1999-03-30 | 3 |<br>
+----------+------------+--------------+</p>
<p>Descobrindo animais com aniversários no próximo mês
é fácil, também. Suponha o mês corrente é
abril. Então o valor de mês é 4 e você espera
animais nascidos no mês de maio (mês 5): </p>
<p class=\"mysql\">mysql> SELECT name, birth FROM pet WHERE MONTH(birth)
= 5;<br>
+-------+------------+<br>
| name | birth |<br>
+-------+------------+<br>
| Buffy | 1989-05-13 |<br>
+-------+------------+</p>
<p>Há uma pequena complicação se o mês corrente
é dezembro. Você não faz somente a soma do número
do mês (12) e espera animais produzidos em mês 13, porque
não há tal mês. Você espera animais produzidos
em janeiro (mês 1). <br>
Você pode até mesmo escrever a pergunta de modo que isto
trabalhe com nenhuma matéria do mês corrente. Aquele caminho
que você não tem que usar um número de mês particular
na pergunta. DATE_ADD() permite você somar um intervalo do tempo
para uma data dada. Se você soma um mês ao valor de NOW(),
então o mês desfaz-se MONTH(), o resultado produzido é
o mês em que esperávamos os aniversários: </p>
<p class=\"mysql\">mysql> SELECT name, birth FROM pet<br>
-> WHERE MONTH(birth) = MONTH(DATE_ADD(NOW(), INTERVAL 1 MONTH));</p>
<p>Um caminho diferente para efetuar a mesma tarefa é somar 1 para
obter o próximo mês depois o mês corrente: </p>
<p class=\"mysql\">mysql> SELECT name, birth FROM pet<br>
-> WHERE MONTH(birth) = MOD(MONTH(NOW()), 12) + 1;</p>
<p>Note que MÊS volta um número entre 1 e 12. e MOD(alguma
coisa,12) volta um número entre 0 e 11. Assim a adição
tem que estar depois de MOD() de outra maneira nós poderíamos
ir de Novembro (11) para Janeiro (1). </p>
Instalei o MySQL na minha máquina, dizem que o usuário é 'root' e a senha é '' (em branco), mas não estou conseguindo acessar o MySQL, depois instalei o Vertrigo Serv, e nele também encontro dificuldades para usar o PHP my Admin. como resolvo este problema?
02/06/2006 7:56am
(~18 anos atrás)
Instalei tudo, apache, PhP e o mysql, a luz do mysql (versao 3.23.51) está verde, digamos que tudo certo, mas como posso testar pra ver se funciona?
26/01/2006 10:13am
(~19 anos atrás)
Caro amigo, me de uma juda.
Tenho uma tabela de cadastro de alunos e tem alguns alunos duplicados.
Gostaria de saber como ver os cadastros duplicados de matricula.
Valeu...
Tenho uma tabela de cadastro de alunos e tem alguns alunos duplicados.
Gostaria de saber como ver os cadastros duplicados de matricula.
Valeu...
03/12/2005 5:41am
(~19 anos atrás)
AMIGOS EU NAO ESTOU CONSEGUINDO AUTENTICAR NO MYSQL ESTOU USANDO APACHE 1.3.29 EO PHP 5.0.4
GOSTARIA QUE VOCE ME AJUDEM A SABER QUANDO ESTOU CONECTADO AO MYSQL.
GOSTARIA QUE VOCE ME AJUDEM A SABER QUANDO ESTOU CONECTADO AO MYSQL.
31/08/2005 9:25am
(~19 anos atrás)
Criei um BD no MySql e inseri alguns registros onde alguns caracteres são especiais, principalmente acentos, só que estou utilizando o dreamweaver para visualizar os dados, e esse acentos nao aparecem no lugar vem outros caracteres (sujeira)o que tenho q fazer
Grato
Grato
27/10/2004 2:05pm
(~20 anos atrás)
Olá João, gostaria de uma ajuda sua, se possível, estou desenvolvendo uma pagina em php, para consulta de procedimentos médicos em um bd mysql, o processo seria o seguinte, tenho uma tabela com 3 campos: contrato, mes, procedimento, queria adicionar um campo senha na tabela, que pegasse os dados do campo contrato, assim o usuario entraria com o login contrato e senha tmb os dados do contrato, só que tenho que fazer todos os meses, e mais uma dúvida, para que a nova inserção dos meses posteriores fosse feita uma inserção na tabela.
Um abraço, agradço a atenção
Kerensky
Um abraço, agradço a atenção
Kerensky
15/08/2004 8:31am
(~20 anos atrás)
Olá estou iniciando na area de programação, gostaria de saber se este artigo é valido para MySql fo Windows??
Estou com dificuldades...
poderia me ajudar...
Obrigado
Estou com dificuldades...
poderia me ajudar...
Obrigado
15/09/2002 2:19pm
(~22 anos atrás)
veja, estive lendo seu artigo aqui colocado, mas me surgiu uma dúvida.
Quando vc falar em ordem crescente DESC, mas como fazer com a ordem decrescente?
O que eu gostaria de saber se na busca SELECT eu posso fazer com que os ids mais velhos fiquem embaixo e os mais novos em cima, tipo assim:
id: 05
id: 04
id: 03
id: 02
id: 01
Como eu aplicaria este processo de busca?
Tem como me dar este help?
Abraços.
betezek@betezek.com.br
fernando