Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.
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.
>
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:
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é+
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
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!