Ir para conteúdo

Arquivado

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

Denis Cabral Lopes

[Resolvido] Consulta entre datas

Recommended Posts

Olá, estou com um sistema, e preciso criar um consulta entre um Data Inicial e uma Data Final, e logo preciso que o PHP,me retorne todos os registros entre tais datas. Já tentei o seguinte, mas não funcionou

 

SELECT EMPR_COD
			,COTR_COD
			,COTR_EMPR_COD
			,EMPR_NOME
			,COTR_DATAI
			,COTR_DATAF
			,COTR_REGIMENTO
			,COTR_TIPO
			,COTR_PRODUTO
			,COTR_DPTO
			,COTR_ADIT
			,COTR_VALCONTR
			,COTR_NOMEGESTOR
			,COTR_STATUS
			FROM BASE_COMUM.SGC_EMPRESA, BASE_COMUM.SGC_CONTRATO
			WHERE SYSDATE BETWEEN  TO_DATE('COTR_DATAI', DD/MM/YY) = :DATAI
       AND TO_DATE('COTR_DATAF', DD/MM/YY) = :DATAF
			AND EMPR_COD = COTR_EMPR_COD
			ORDER BY EMPR_NOME ASC

 

Sou iniciante nisso, será que alguém pode me ajudar.?

Compartilhar este post


Link para o post
Compartilhar em outros sites

COTR_DATAI e COTR_DATAF são do tipo DATE ?

 

São dois parametros de busca (:DATAI e :DATAF) ?

 

Ou seja se vai buscar um intervalo dentro de outro ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente :

 

SELECT EMPR_COD
                               ,COTR_COD
                               ,COTR_EMPR_COD
                               ,EMPR_NOME
                               ,COTR_DATAI
                               ,COTR_DATAF
                               ,COTR_REGIMENTO
                               ,COTR_TIPO
                               ,COTR_PRODUTO
                               ,COTR_DPTO
                               ,COTR_ADIT
                               ,COTR_VALCONTR
                               ,COTR_NOMEGESTOR
                               ,COTR_STATUS
                               FROM BASE_COMUM.SGC_EMPRESA, BASE_COMUM.SGC_CONTRATO
                               WHERE :DATAI BETWEEN  COTR_DATAI AND COTR_DATAF 
                               AND   :DATAF BETWEEN  COTR_DATAI AND COTR_DATAF
                               AND EMPR_COD = COTR_EMPR_COD
                               ORDER BY EMPR_NOME ASC

 

Mas esta pesquisa de um intervalo de datas entre outro intervalo precisa ser melhor definida.

 

Exemplo

 

COTR_DATAI = 11/03/2012

COTR_DATAF = 13/03/2012

 

:DATAI = 10/03/2012

:DATAF = 12/03/2012

 

Por um critério deveria "trazer" , veja que pela query não "traria".

Compartilhar este post


Link para o post
Compartilhar em outros sites

Denis, acho que sua pergunta é simples e o pessoal está complicando um pouco.

1- Concordo com o Motta.

2- Partindo do principio que é iniciante

Como fazer consulta entre datas:

Seu select ficaria assim:

SELECT EMPR_COD
                               ,COTR_COD
                               ,COTR_EMPR_COD
                               ,EMPR_NOME
                               ,COTR_DATAI
  SELECT EMPR_COD
                               ,COTR_COD
                               ,COTR_EMPR_COD
                               ,EMPR_NOME
                               ,COTR_DATAI
                               ,COTR_DATAF
                               ,COTR_REGIMENTO
                               ,COTR_TIPO
                               ,COTR_PRODUTO
                               ,COTR_DPTO
                               ,COTR_ADIT
                               ,COTR_VALCONTR
                               ,COTR_NOMEGESTOR
                               ,COTR_STATUS
                               FROM BASE_COMUM.SGC_EMPRESA, BASE_COMUM.SGC_CONTRATO
                               WHERE SYSDATE BETWEEN  TO_DATE('COTR_DATAI', DD/MM/YY) = :DATAI
       AND TO_DATE('COTR_DATAF', DD/MM/YY) = :DATAF
                               AND EMPR_COD = COTR_EMPR_COD
                               ORDER BY EMPR_NOME ASC                             ,COTR_DATAF
                               ,COTR_REGIMENTO
                               ,COTR_TIPO
                               ,COTR_PRODUTO
                               ,COTR_DPTO
                               ,COTR_ADIT
                               ,COTR_VALCONTR
                               ,COTR_NOMEGESTOR
                               ,COTR_STATUS
                               FROM BASE_COMUM.SGC_EMPRESA, BASE_COMUM.SGC_CONTRATO
                               WHERE SYSDATE >= :DATAI
                                 AND SYSDATE <= :DATAF
                               AND EMPR_COD = COTR_EMPR_COD
                               ORDER BY EMPR_NOME ASC

 

/*Seria somente para garantir que a data de hoje esteja dentro do periodo que está filtrando, pode ser uma alternativa que esteja tentando fazer*/

 

 

Atenciosamente

Felipe Filho

Skype: felipe.calixto

Site: sawicontroladoria.tk

Blog: sawiblog.sytes.net

Compartilhar este post


Link para o post
Compartilhar em outros sites

WHERE SYSDATE BETWEEN  TO_DATE('COTR_DATAI', DD/MM/YY) = :DATAI
              AND TO_DATE('COTR_DATAF', DD/MM/YY) = :DATAF

 

Esta sintaxe está errada , veja a correta aqui.

 

E acho o questionamento da busca válido, não sei se me fiz entender.

Um exemplo:

Um evento durou de 01/03/2012 A 12/03/2012, quando passamos um parametro de busca de 27/02/2012 a 03/03/2012 , a query deve considerar ou não o registro ? Não tem a ver com SQL e sim com o negócio, para um caso usaremos AND para outros OR.

 

Desculpe-me se não fui claro novamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Testei todas essas formas postadas, tentei mudar alguns outros parametros, porém, nada funcionou.

 

Algo que na teoria seria simples, na pratica em si, está se tornando quase impossivel.

 

 

E acho o questionamento da busca válido, não sei se me fiz entender.

Um exemplo:

Um evento durou de 01/03/2012 A 12/03/2012, quando passamos um parametro de busca de 27/02/2012 a 03/03/2012 , a query deve considerar ou não o registro ? Não tem a ver com SQL e sim com o negócio, para um caso usaremos AND para outros OR.

 

Então, nesse caso não deveria considerar, caso a pessoa queira todos registros abaixo de determinada data, ele só coloca a data final, ou a partir da data inicial, ou seja, isso seria algo que o úsuario teria que ir ajustando, mas o criterio seria basicamente esse mesmo :DATAI >= COTR_DATAI AND :DATAF <= COTR_DATAF

 

Mas não sei por qual motivo obscuro não funciona

 

Aewwwww uhuuu, consegui, depois de horas analisando kkkkkk, consegui

 

ficou assim:

 

SELECT EMPR_COD
                               ,COTR_COD
                               ,COTR_EMPR_COD
                               ,EMPR_NOME
                               ,COTR_DATAI
                               ,COTR_DATAF
                               ,COTR_REGIMENTO
                               ,COTR_TIPO
                               ,COTR_PRODUTO
                               ,COTR_DPTO
                               ,COTR_ADIT
                               ,COTR_VALCONTR
                               ,COTR_NOMEGESTOR
                               ,COTR_STATUS
                               FROM BASE_COMUM.SGC_EMPRESA, BASE_COMUM.SGC_CONTRATO
                               WHERE :DATAI >= COTR_DATAI AND :DATAF <= COTR_DATAF
                               AND EMPR_COD = COTR_EMPR_COD
                               ORDER BY EMPR_NOME ASC

 

onde irei apontar o input text inicial para :DATAI e o final para :DATAF.

 

 

 

Muito obrigado, pela atenção e ajuda de todos.

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.