Ir para conteúdo

POWERED BY:

Arquivado

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

Lomaster

[Resolvido] select com between

Recommended Posts

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

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

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

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

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

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

×

Informação importante

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