Lomaster 0 Denunciar post Postado Fevereiro 25, 2011 Colegas Estou usando o seguinte script para filtrar o conteúdo entre duas datas SELECT * FROM agenda WHERE STR_TO_DATE(dtevento, '%d/%m/%Y') BETWEEN col1 AND col2 No entanto, o resultado sempre é vazio. o que pode estar errado? Testei com campo timestamp e date. Compartilhar este post Link para o post Compartilhar em outros sites
Deise Vicky 1 Denunciar post Postado Fevereiro 25, 2011 Pelo que sei a função STR_TO_DATE converte uma variável String para Data. No caso, se a coluna 'dtevento' for do tipo Datetime o valor não será convertido. Mas de qualquer forma tenta mudar a sintaxe. SELECT *, STR_TO_DATE(dtevento, '%d/%m/%Y') FROM agenda WHERE coluna BETWEEN valor1 AND valor2 ou senão tenta fazer algo assim: SELECT *, ISNULL(dtevento, GETDATE()) FROM agenda WHERE coluna BETWEEN valor1 AND valor2 Dessa segunda forma eu sei que funciona no SQL Server...como não trabalho muito com MySql não sei se a função GETDATE() existe, no Sql Server essa função traz a data atual...Se não funcionar troque o GETDATE() por um valor qualquer, tipo 0, que caso o campo "dtevento" seja nulo ele traz esse valor... Abraços! Compartilhar este post Link para o post Compartilhar em outros sites
Lomaster 0 Denunciar post Postado Fevereiro 27, 2011 Colega, boa tarde Testei com a 1º sintaxe e está dando certo. No entanto, estou com problema no campo dtevento. Como datetime ele retorna todos os registros. como date ele não retorna dado algum. Como eu faço? A data está sendo armazenada no padrão americano =2011-02-25. Compartilhar este post Link para o post Compartilhar em outros sites
Deise Vicky 1 Denunciar post Postado Fevereiro 28, 2011 Colega, boa tarde Testei com a 1º sintaxe e está dando certo. No entanto, estou com problema no campo dtevento. Como datetime ele retorna todos os registros. como date ele não retorna dado algum. Como eu faço? A data está sendo armazenada no padrão americano =2011-02-25. Olha, não tenho muita certeza do que pode estar acontecendo, porque nunca precisei utilizar esse tipo de função no MySQL, mas estive lendo um artigo e acredito que seja porque a comparação do campo tipo Date é feita da direita para a esquerda... Acredito que talvez você tentando converter o campo dtevento na hora da comparação dê certo. O problema é que é da mesma forma que você tinha tentado no início.... Tipo assim: SELECT *, STR_TO_DATE(dtevento, '%d/%m/%Y') FROM agenda WHERE STR_TO_DATE(dtevento, '%d/%m/%Y') BETWEEN valor1 AND valor2 Dessa forma era para dar certo, porque aí você está convertendo a data '2011-02-25' para '25-02-2011' e estará comparando o valor convertido com os teus parâmetros no formato 'dd/mm/aaaa'. Mas você está precisando utilizar essa consulta como? Em uma aplicação integrada com banco de dados, onde o usuário informa um intervalo de datas ou para simples consulta mesmo? Sabendo como você quer utilizar talvez eu consiga te ajudar mais... Dê uma olhada: MySQL Manipulando Datas Consultando Datas Compartilhar este post Link para o post Compartilhar em outros sites
Lomaster 0 Denunciar post Postado Fevereiro 28, 2011 Estou usando para consultar eventos em uma agenda.Tenho dois campos nos quais entro com a menor e maior data. Vou dar uma olhada no link que você me passou .té+ Compartilhar este post Link para o post Compartilhar em outros sites
Lomaster 0 Denunciar post Postado Março 8, 2011 Deise, bom dia Conseguir resolver meu problema através da sua solução. segue o código abaixo. Alterei por conveniencia o campo dtevento prar date e exclui o str_to_date. SELECT c.nome,c.rua,c.num,c.bairro, c.cidade,c.telefone , a. * AS agenda FROM cliente AS c INNER JOIN agenda AS a ON a.id_cliente=c.id WHERE date_format( dtevento, '%d/%m/%Y' ) BETWEEN data1 AND data2 ORDER BY a.dtevento Compartilhar este post Link para o post Compartilhar em outros sites