Clausula Where Oracle [RESOLVIDO]

9 respostas
criador

Bom dia.
Sei que este fórum não é sobre banco de dados Oracle, porém irei utilizar este select em um programa Java.
A minha desculpa é essa para postar aqui minha dúvida :wink: auahuhuah

Então, quero comparar duas datas.

Exemplo:

Tenho uma coluna que me retorna uma string com uma data = "04/02/2011 00:00:00.000".
Quero transformar esta String em uma data.

Após isto, quero recuperar todas as linhas existentes em "sysdate - 30" desta data.

Resumindo:

"04/02/2011 00:00:00.000" > (sysdate - 30)

Quero fazer esta comparação, porém já tentei de TODAS as maneiras e nada.

Alguém pode me dar uma luz por favor.

Abraços!

9 Respostas

Nicolas_Fernandes

criador:
Bom dia.
Sei que este fórum não é sobre banco de dados Oracle, porém irei utilizar este select em um programa Java.
A minha desculpa é essa para postar aqui minha dúvida :wink: auahuhuah

Então, quero comparar duas datas.

Exemplo:

Tenho uma coluna que me retorna uma string com uma data = "04/02/2011 00:00:00.000".
Quero transformar esta String em uma data.

Após isto, quero recuperar todas as linhas existentes em "sysdate - 30" desta data.

Resumindo:

"04/02/2011 00:00:00.000" > (sysdate - 30)

Quero fazer esta comparação, porém já tentei de TODAS as maneiras e nada.

Alguém pode me dar uma luz por favor.

Abraços!

Oi,
O certo era você postar esse tópico na parte de Persistência de Dados, JDBC e afins, mas tá valendo. rs
Bom, se você quer comparar só as datas, você pode fazer da seguinte maneira:

Select
   blablabla

From
   blablabla

Where
   // Pode usar o Trunc, que retorna dd/MM/yyyy...
   Trunc(SeuCampoDeData) > Trunc(SysDate - 30)
   // ou o To_Date, que faz o mesmo do Trunc...
   To_Date(SeuCampoDeData) > To_Date(SysDate - 30)
   // ou até To_Char, que retorna dd/MM/yy!
   To_Char(SeuCampoDeData) > To_Date(SysDate - 30)

Testa e nos dá o reply aí!
Abraços

criador

Já havia feito todas as opções.
Deixa eu explicar melhor.

Tenho uma coluna CLOB que contém um XML.
Através de uma função que tenho aqui, consigo capturar dentro deste XML o conteúdo que quero.
Este conteúdo eu jogo dentro do to_char() porque o to_char recebe por parâmetro um CLOB.
Ok.
Desta forma tenho minha data:

to_char(FUNCAO(Xml, 'Tag_Data');

Neste momento já tenho a data.
Agora preciso transformá-la em data para posterior comparação com o “sysdate - 30”.
Consigo transformar em data usando o to_date(), porém quando vou comparar, o Oracle informa ORA-01861: o literal não corresponde à string de formato.

Preciso converter o formato da data para dd/mm/yyyy para poder comparar com o sysdate ???
Ou utilizo o mesmo formato que o sysdate usa?

Espero ter sido claro.

Abraços!

Nicolas_Fernandes

criador:
Já havia feito todas as opções.
Deixa eu explicar melhor.

Tenho uma coluna CLOB que contém um XML.
Através de uma função que tenho aqui, consigo capturar dentro deste XML o conteúdo que quero.
Este conteúdo eu jogo dentro do to_char() porque o to_char recebe por parâmetro um CLOB.
Ok.
Desta forma tenho minha data:

to_char(FUNCAO(Xml, 'Tag_Data');

Neste momento já tenho a data.
Agora preciso transformá-la em data para posterior comparação com o "sysdate - 30".
Consigo transformar em data usando o to_date(), porém quando vou comparar, o Oracle informa ORA-01861: o literal não corresponde à string de formato.

Preciso converter o formato da data para dd/mm/yyyy para poder comparar com o sysdate ???
Ou utilizo o mesmo formato que o sysdate usa?

Espero ter sido claro.

Abraços!

Bom, se fosse eu, converteria as duas datas para um formato igual, para evitar esses problemas de comparação.
Eu converteria da seguinte forma:

to_char(FUNCAO(Xml, 'Tag_Data'), 'dd-MM-yyyy hh24:mm:ss') >
to_char(SysDate - 30, 'dd-MM-yyyy hh24:mm:ss')

Que tal? As duas datas estão sendo convertidas para um mesmo formato, evitando erros de comparação.
Testa aí!

criador

Se eu comparar com to_char eu estarei comparando String e não Data.
Por isso que preciso transformar minha String em Data.

Abraços!

Nicolas_Fernandes
criador:
Se eu comparar com to_char eu estarei comparando String e não Data. Por isso que preciso transformar minha String em Data.

Abraços!

Select

   Case
      When to_date('01/01/2001') > trunc(sysdate) Then 'Greater than sysdate!'
      When to_date('01/01/2001') <= trunc(sysdate) Then 'Lesser than sysdate!'
   End Data

From dual

Que tal assim?
Você pode trocar o '01/01/2001' por sua função de retornar a data lá do XML!

criador

É EXATAMENTE isto que estou fazendo.
E não roda!

Nicolas_Fernandes

criador:
É EXATAMENTE isto que estou fazendo.
E não roda!

Descobre como tá vindo o resultado do seu XML. Será que tá vindo no formato certo? Confere se tá vindo com hora, também, pra gente ter uma ideia certinho!

gfkauer

Select Sysdate From dual Where trunc(to_date('01/02/2011 00:00', 'dd/mm/rrrr hh24:mi')) > trunc(Sysdate - 30)

Tente dar trunc na sua data e no sysdate, deixando as duas com a mesma estrutura.

criador

Rapaziada, valeu mesmo pelo ajuda.
O problema não estava na formatação da data e sim nos dados contidos na tabela que estou usando para este select.

Haviam linhas no formato 2011/02/04 00:00:00.000 e outras no formato 04/02/2011 00:00:00.000.
Além disso, haviam também linhas com 1 espaço a mais entre a data e a hora, ou seja, com 2 espaços.

Desta forma, a máscara NUNCA iria bater com todas as linhas.

Mas valeu pela ajuda.

Abraços e até a próxima =D

Criado 4 de fevereiro de 2011
Ultima resposta 4 de fev. de 2011
Respostas 9
Participantes 3