Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

hcfpastel

[Resolvido] Como pesquisar em campo DATETIME do mysql tendo apena

Recommended Posts

Boa tarde, pessoal..

 

Estou com um problema aqui no trampo com um campo datetime e não estou conseguindo resolver..

já pesquisei dimais, então vou direto ao ponto..

 

 

Bom.. preciso pesquisar somente a data em um campo do tipo datetime...

eu até consigo listar os registros e gerar a tabela normalmente.. só que o problema é que a consulta retorna os valores, porém o $total_linhas = mysql_num_rows() do php retorna 0 pra variável $total_linhas...

 

Já tentei das seguintes formas:

SELECT *, count(*) as total from visualizadores where cast(data_cadastro as date) = '2009-07-24';

//a variável total recebe o total correto, porém só lista o último campo,.. e o mysql_num_rows() retorna 0

 

SELECT * from visualizadores where cast(data_cadastro as date) = '2009-07-24';

//retorna todos os campos corretamente, porém o mysql_num_rows() retorna 0...

 

SELECT * FROM visualizadores where MONTH(data_cadastro) = 07;

//retorna todos os campos corretamente, porém o mysql_num_rows() retorna vazio

 

com DATE_FORMAT tbm não dá... pq ele serve pra listar formatando a data que existe.... e o que preciso é o contrário....

 

Resumindo..

tenho uma data: 24/04/2009 ....

e quero pesquisar esta data no banco, que está assim: 24/04/2009 13:20:32

 

Se alguém souber como, dá um help ae pq tá custoso isso...

Odeio ficar criando tópico pq quase que 100% das vezes acho na net o que procuro..

mas dessa vez tá difícil.... sempre acho explicação só em 'como formatar a saída dos dados'... mas procurar o dado já formatado táh osso...

 

talvez seja erro na lógica, sei láh...

 

Correção do título:

Como pesquisar em campo DATETIME do mysql tendo apenas a DATA

Compartilhar este post


Link para o post
Compartilhar em outros sites


SELECT COUNT(*) FROM VISUALIZADORES WHERE CONVERT(VARCHAR,DATA,103) = '05/10/2009'

ou

 


SELECT COUNT(*) FROM VISUALIZADORES WHERE CAST(DATA_CADASTRO AS VARCHAR) = '24/07/2009';

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dee.... valeu pela atenção, mas ainda não deu certo, cara...

 

select count(*) as total from visualizadores where cast(data_cadastro as date) = '24/07/2009';
Tentei assim e retornou total = 0;

 

select * from visualizadores where cast(data_cadastro as date) = '24/07/2009';
Tentei assim e retornou "Truncated incorrect date valur: '24/07/2009'

(E existe um registro com esses dados)

 

SELECT COUNT(*) FROM visualizadores WHERE CAST(data_cadastro AS varchar) = '24/07/2009';
Tentei assim e retornou erro de sintaxe..

 

 

Ahh... essa budega vai me dexáh loco ainda, véi..

aneimmmm

Compartilhar este post


Link para o post
Compartilhar em outros sites

E esse daqui que eu postei ???

Tentou esse ?

 

 

SELECT COUNT(*) FROM VISUALIZADORES WHERE CONVERT(VARCHAR, DATA, 103) = '24/07/2009'

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, você tem certeza que o tipo do campo desta data é DATETIME ??????

 

E que o formato está 24/04/2009 13:20:32 ?????

 

Verifique como está o formato no seu banco...

 

deve estar assim: 2009-04-24 13:20:32

 

Tente fazer a pesquisa assim:

 

SELECT *, count(*) AS total FROM visualizadores WHERE data_cadastro = STR_TO_DATE('2009-07-24', '%Y-%m-%d');

 

ou assim:

 

SELECT *, count(*) AS total FROM visualizadores WHERE DATE_FORMAT(data_cadastro, '%Y-%m-%d') = STR_TO_DATE('2009-07-24', '%Y-%m-%d');

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou com um problema aqui no trampo com um campo datetime e não estou conseguindo resolver..

 

Bom.. preciso pesquisar somente a data em um campo do tipo datetime...

 

Amigão, é simples e você pode utilizar as funções do próprio mysql:

 

Seus dados estão assim:

mysql> select * from `datas`;
+----+---------------------+
| id | data |
+----+---------------------+
| 1 | 2009-10-06 06:36:27 |
| 2 | 2009-11-06 15:00:27 |
| 3 | 2009-12-06 19:00:38 |
+----+---------------------+
3 rows in set (0.00 sec)

Recuperando apenas a parte da data:

mysql> select date(data) from `datas`;
+------------+
| date(data) |
+------------+
| 2009-10-06 |
| 2009-11-06 |
| 2009-12-06 |
+------------+
3 rows in set (0.00 sec)

O problema de se utilizar a função date() do MySQL é que a data retornada não é no padrão brasileiro e por isso você não conseguirá fazer a comparação com essa string, então a solução é converter essa data para o padrão brasileiro:

 

mysql> select date_format(data,'%d/%m/%Y') from `datas`;
+------------------------------+
| date_format(data,'%d/%m/%Y') |
+------------------------------+
| 06/10/2009 |
| 06/11/2009 |
| 06/12/2009 |
+------------------------------+
3 rows in set (0.00 sec)

Agora que já temos a data no nosso padrão, basta fazer a consulta:

mysql> select * from `datas` where date_format(data,'%d/%m/%Y')='06/11/2009';
+----+---------------------+
| id | data |
+----+---------------------+
| 2 | 2009-11-06 15:00:27 |
+----+---------------------+
1 row in set (0.00 sec)

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Orra, gente... que m*****, viu... esse negócio aqui tá me dando nos nervos, véi...

 

tipo... a solução proposta pelo joão batista listou os registros certinho..

select * from visualizadores where date_format(data_cadastro, '%d/%m/%Y') = '24/07/2009';
o problema é que o total tá retornando ZERO...

 

 

e se eu coloco assim:

select *, count(*) as total from visualizadores where date_format(data_cadastro, '%d/%m/%Y') = '24/07/2009';

Ela só lista o último registro, porém a variável total recebe o valor correto, que no caso é 4..

 

 

lucasmartins.com.br.... o campo é do tipo datetime sim, clara... eu estou desenvolvendo o sistema completamente..

 

Mas bem... vou refazer meu script aqui totalmente,... e ver se o que estou errando não é na lógica na hora de atribuir á variável TOTAL no php a quantidade de linhas que a consulta tá retornando..

 

esse negócio de fazer consulta po data realmente dá um trabalho do caramba....

Por nome, email, vem tudo redondinho.. mai a bendita data de cadastro tá me danu dor de cabeça, véi.. virgi maria...

 

Obrigado a todos que estão tentando ajudar ae...

Em breve aviso aqui o q resultou...

Compartilhar este post


Link para o post
Compartilhar em outros sites

SELECT COUNT(*) FROM VISUALIZADORES WHERE CONVERT(VARCHAR, DATA_CADASTRO, 103) = '24/07/2009'

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ela só lista o último registro, porém a variável total recebe o valor correto, que no caso é 4..

 

Com base nesta sua afirmação, creio que o seu problema não esteja na consulta. Para testar, execute esta consulta no PhpMyAdmin ou outro programa que você tenha para administrar o banco de dados.

Caso aqui o resultado esteja aparecendo corretamente, poste a forma que você está utilizando para exibir os dados. Aparentemente o problema está ali.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

tipo... a solução proposta pelo joão batista listou os registros certinho..

 

o problema é que o total tá retornando ZERO...

 

Se os dados estão sendo listados corretamente então basta utilizar mysql_num_rows() para recuperar o total de registros, uma vez que a função count(*) do MySQL é um agrupador:

 

if ( $res = mysql_query( 'select * from visualizadores where date_format(data_cadastro, "%d/%m/%Y") = "24/07/2009"' ) ){
$total = mysql_num_rows( $res );

while ( $row = mysql_fetch_array( $res , MYSQL_ASSOC ) ) var_dump( $total , $row );
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mais uma vez eu me firmo no pensamento de que:

"Nem sempre o que dá certo, está certo realmente"...

 

Era o posicionamento de uma variável que estava errado..

tipo....

 

eu tenho basicamente dois tipos de consulta... a que filtra, e a que lista tudo...

 

Só que tipo... a que filtra, pra listar o total, sempre tinha o mesmo valor....

 

$sql_filtrar = "SELECT * FROM visualizadores where $local LIKE'$detalhe%'";
E dava certo com nome, email, cidade, estado, etc... pq nesses campos sempre era dessa forma que a consulta era realizada.

 

já na data... eu teria que atribuir á variável $sql_filtrar, a devida consulta com suas modificações.... tipo:

 

if ($local == "data_cadastro"){
$dia = substr($detalhe,0,2);
$mes = substr($detalhe,3,2);
$ano = substr($detalhe,6,4);

$consulta_filtrar = "select * from visualizadores where date_format(data_cadastro, '%d/%m/%Y') = '" . $detalhe . "'";
$sql_filtrar = $consulta_filtrar;
}

E era nisso que tava dando pau essa budega aqui..

dposakdposakpdoak

 

Mas nada como compilar o código mentalmente linha a linha, pra que esses erros de lógica idioootas sejam solucionados...

 

Obrigado a todos mais uma vez..

 

quando tiverem um tempo, acessem ae...

www.silvanews.com.br

ainda tem muiiiiiito a fazer no sistema... e essa minha dúvida aqui, por exemplo, é pro gestor de conteúdo do site..

Futuramente, minha empresa quer que eu crie tipo um 'orkut da empresa'.... só pra quem já fez os treinamentos que ela oferece e talz..

 

e eu, sinceramente, ainda tô recolhendo as idéias de tudo que querem que tenha, pra depois documentar o sistema e colocar a mão na massa.

 

Bom dia a todos... e até mais...

 

Opss.. só um comentário sobre o código que postei acima...

 

Eu tinha colocado esse substr ae pq antes, na minha consulta, eu concatenava dia, mes e ano, usando os metodos DAY, MONTH e YEAR.... agora já posso tirar isso ae que fica mai fácil... hehe..

 

Só quando é pra procurar por Dia ou mes ou ano, separadamente, é que terei de continuar usando esses métodos..

 

\o//

Compartilhar este post


Link para o post
Compartilhar em outros sites

Outra coisa ... você tem permissoes para mudar o tipo da variavel ?

 

Em caso afirmativo a mudança nao vai interferir no projeto ?

 

Uma vez eu mudei o tipo de variavel Timestamp para Date e o meu problema que era parecido com o seu foi resolvido..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Outra coisa ... você tem permissoes para mudar o tipo da variavel ?

 

Em caso afirmativo a mudança nao vai interferir no projeto ?

 

Uma vez eu mudei o tipo de variavel Timestamp para Date e o meu problema que era parecido com o seu foi resolvido..

 

PaladinoMedieval

 

Como dito anteriormente, o problema estava mais na lógica do que na sql...

mas só respondendo sua pergunta, tenho acesso total e permissão 100% pra modificar o que eu quizer no banco ou sistema em si... só que o campo estando como datetima pra mim está melhor, pois tenho mais controle de acesso dos usuários no sistema...

Como por exemplo... listar a última vez que o usuário acessou o sistema...

(essa claro é listada atravez da consulta em outro campo... mas achei melhor padronizar tudo que é tipo de campo DATA para datetime)..

 

(Y)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.