Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal,
Dúvida simples
Resolvi grava a data e hora usando o timestamp.
Agora preciso filtra os dados pela data, ou seja mostrar somente os registros pela data de HOJE
eu gravo assim no banco
data = timestamp
No bd fica assim: 2009-07-21 14:40:15
Terei que dar um explode e pegar a data e procurar no banco ou tem algum comando direto na query para filtrar, como por exemplo o Between?
>
Agora preciso filtra os dados pela data, ou seja mostrar somente os registros pela data de HOJE
Terei que dar um explode e pegar a data e procurar no banco ou tem algum comando direto na query para filtrar, como por exemplo o Between?
Basta usar a função date:
Criando a tabela:
mysql> create table `timestamp` (
-> `id` mediumint(8) unsigned not null auto_increment,
-> `data` timestamp not null default current_timestamp on update current_timestamp,
-> primary key(`id`),
-> key `datas`(`data`)
-> ) engine=MyISAM;
Query OK, 0 rows affected (0.00 sec)
Populando:
mysql> insert into `timestamp`(`data`) values
-> ("2009-07-21 14:40:15"),
-> ("2009-07-22 14:40:15"),
-> ("2009-07-23 14:40:15"),
-> ("2009-07-24 14:40:15"),
-> ("2009-07-25 14:40:15"),
-> ("2009-07-26 14:40:15"),
-> ("2009-07-27 14:40:15"),
-> (now());
Query OK, 8 rows affected (0.00 sec)
Records: 8 Duplicates: 0 Warnings: 0
Ok, sua tabela está parecida com isso:
mysql> select * from timestamp;
+----+---------------------+
| id | data |
+----+---------------------+
| 1 | 2009-07-21 14:40:15 |
| 2 | 2009-07-22 14:40:15 |
| 3 | 2009-07-23 14:40:15 |
| 4 | 2009-07-24 14:40:15 |
| 5 | 2009-07-25 14:40:15 |
| 6 | 2009-07-26 14:40:15 |
| 7 | 2009-07-27 14:40:15 |
| 8 | 2009-07-28 19:14:42 |
+----+---------------------+
8 rows in set (0.00 sec)
Agora filtrando entre datas:
mysql> select data from timestamp where date(data) between date("2009-07-21") and date("2009-07-24");
+---------------------+
| data |
+---------------------+
| 2009-07-21 14:40:15 |
| 2009-07-22 14:40:15 |
| 2009-07-23 14:40:15 |
| 2009-07-24 14:40:15 |
+---------------------+
4 rows in set (0.00 sec)
Agora, finalmente, o que você quer, que é pegar os registros com a data de hoje:
mysql> select data from timestamp where date(data) = date(now());
+---------------------+
| data |
+---------------------+
| 2009-07-28 19:14:42 |
+---------------------+
1 row in set (0.01 sec)
Como no exemplo acima, você não precisa do between para recuperar os registros com a data de hoje.
Um dos motivos de não querer usar DATE na tabela, é porque eu sei como trazer a data usando ela. Eu queria mesmo é aprender com timestamp.
E funcionou certinho.
Só para deixar arquivado para filtrar por mês eu usei MOD(MONTH(CURDATE())
Show de bolaa
João abraçoss valeu pela dica.
Resolvido.
Acho mais fácil salvar como DATE e só usar o between normal. Dê uma olhada no manual, talvez te ajude.
http://dev.mysql.com/doc/refman/4.1/pt/date-and-time-functions.html
Carlos Eduardo