[Resolvido] Meu Select não faz comparação de data usando "="
13 respostas
C
CristianoGDT
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 ??
ps: a data que está na tabela é EXATAMENTE a mesma que passo pra fazer a consulta (20/07/2011).
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
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
mas será que nao existe uma forma de usar = (igual) nesse tipo de comparação ?!
Não funciona, ja tentei algo parecido na mensagem acima da sua.
Que problema chato…
C
CristianoGDT
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
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
CristianoGDT
Também não funciona !!!
:(
Também não funciona !!!
C
CristianoGDT
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