[Resolvido] Meu Select não faz comparação de data usando "="

13 respostas
C

Pessoal estou com um problema chato. Em uma consulta que estou fazendo (em Oracle) percebi que ele não compara a data que eu passo com um campo da tabela:

SELECT IDCONTROLEREPARO,
  MATRICULA,
  IDMOVIMENTO,
  CRI,
  TOTAL_HORA,
  CUSTO_MAO_OBRA,
  IDMATRICULA,
  FIM,
  FERIADO,
  INICIO,
  OBSERVACAO
FROM CONTROLE_REPARO
WHERE CRI  = '1100031'
AND INICIO = '20/07/2011';  ////>   problema aqui (se ao inves de = (igual) eu usar > (maior) ele funciona)

Como descrevi no comentário acima se eu uso = ele nao traz o resultado, mas usando > ele traz.
Mas eu não quero as datas maiores da que eu passei, quero exatamente aquela.
Alguém pode me ajudar ?? :smiley:

ps: a data que está na tabela é EXATAMENTE a mesma que passo pra fazer a consulta (20/07/2011).

13 Respostas

JoaoBluSCBR

Tente usar:

#20/07/2011#

C

Não da certo, usei da seguinte forma AND INICIO = ‘#20/07/2011#’; e da erro:

*Cause: The input data to be converted using a date format model was
incorrect. The input data did not contain a number where a number was
required by the format model.

*Action: Fix the input data or the date format model to make sure the
elements match in number and type. Then retry the operation.

Lembrando que a coluna INICIO é do tipo DATE

isaiaspf

Que estranho, vê se essa solução temporária funciona:INICIO >= '20/07/2011' AND INICIO <= '20/07/2011'Abraço.

C

Então…

não funciona , mas

AND INICIO > TO_DATE('20/07/2011','DD/MM/YYYY') AND INICIO < TO_DATE('20/07/2011','DD/MM/YYYY')+1
Isso funciona.

Mas não é isso que eu quero fazer, não posso sair mudando o código da minha empresa :cry:

mas será que nao existe uma forma de usar = (igual) nesse tipo de comparação ?!

isaiaspf

Tentou:INICIO = TO_DATE('20/07/2011','DD/MM/YYYY')

C

Não funciona, ja tentei algo parecido na mensagem acima da sua.
Que problema chato…

:frowning:

C

CristianoGDT:
Então…

não funciona , mas

AND INICIO > TO_DATE('20/07/2011','DD/MM/YYYY') AND INICIO < TO_DATE('20/07/2011','DD/MM/YYYY')+1
Isso funciona.

Mas não é isso que eu quero fazer, não posso sair mudando o código da minha empresa :cry:
mas acho que vou ter que fazer isso

mas será que nao existe uma forma de usar = (igual) nesse tipo de comparação ?!

leoramos

Vi umas soluções no google e aqui fazendo conversão com TO_CHAR; e outras comentando que teu problema pode ser a data contendo o time, que você precisa truncá-la antes.
Como manjo de Oracle tanto quanto uma muriçoca entende de caldo de cana, não faço idéia se funciona.
Tentar, não custa hehe
Abraço!

gfkauer

Possivelmente o baco usa um formato de data diferente do que voce esta usando na comparação.

Se quer usar “=” e não souber o tipo de entrada você deverá converter os dois lados da igualdade para o mesmo formato.

Se nem este tipo de alteração você pode fazer no seu sistema, sinto lhe informar mas não existe nenhuma solução que não exija mudanças…

C
Também não funciona !!!

 :(

Também não funciona !!!

:frowning:

C

Enfim, depois de várias pesquisas acredito que o Oracle grava as informações de hora e minuto no tipo DATE (me corrijam se estiver errado, pois é a unica explicação)

Utilizando a dica do leoramos em relação a truncar as datas isso funcionou, e acredito que seja a única forma de comparar usando = (igual)

ficou assim:

Agora minha briga será com os arquitétos do sistema pra mudar a forma de pesquisa… :evil:

Vou colocar esse tópico como Resolvido, mesmo com esse “mistério” no ar

leoramos

http://forums.devshed.com/oracle-development-96/comparing-dates-87728.html[/code]
Exatamente o teu problema, com exatamente a solução que eu comentei.

Abraço e bom trabalho - pesquisa também faz parte dele.

Inté!

gfkauer

Desculpe-me, mas tu queria que uma informação de data fosse gravada em que tipo de coluna? Number? Varchar?

Criado 21 de julho de 2011
Ultima resposta 21 de jul. de 2011
Respostas 13
Participantes 5