Clausula Where Oracle [RESOLVIDO]

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!

[quote=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![/quote]

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

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!

[quote=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![/quote]

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í!

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!

[quote=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![/quote]

[code]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[/code]

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

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

[quote=criador]É EXATAMENTE isto que estou fazendo.
E não roda![/quote]

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!

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.

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