Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Data na clausula where com Oracle

Preciso fazer uma extração em banco Oracle com movimentos superiores a uma determinada data contida numa variável.o

Em banco Progress o seguinte comando funciona:f

from EMS5.TIT_ACR    WHERE YEAR(DAT_EMIS_DOCTO) >= '$(DAT_LIMITE)'

Em banco Oracle dá erro devido ao comando Year.

Alguém pode me ajudar ?

11 Replies
nicolett_yuri

A função YEAR não existe para o Oracle.

Não conheço muito ORACLE, mas acredito que você pode resolver seu problema com a função EXTRACT

EXTRACT( YEAR FROM date_field)

ou usando TO_DATE.

srchagas
Creator III
Creator III

Use assim TO_DATE('$(vIni)','DD/MM/YYYY HH24:MI:SS')

Not applicable
Author

Pode reescrever a clausula abaixo utilizando este comando por favor ?

.... WHERE YEAR(DAT_EMIS_DOCTO) >= '$(DAT_LIMITE)'

srchagas
Creator III
Creator III

Vai depender de como está formatado a data no banco....Se o campo for do tipo DATE no oracle e formado com padrão : DIA-MES-ANO-Hora-minuto-Segundo

WHERE DAT_EMIS_DOCTO >= TO_DATE('$(DAT_LIMITE)','DD/MM/YYYY HH24:MI:SS')


caso o campo não seja Data :


WHERE TO_DATE(DAT_EMIS_DOCTO,'DD/MM/YYYY HH24:MI:SS') >= TO_DATE(''$(DAT_LIMITE)','DD/MM/YYYY HH24:MI:SS')


Se por um acaso o campo não tiver no padrão 'DD/MM/YYYY hh24:mi:ss', você pode formatar da melhor forma que quiser


srchagas
Creator III
Creator III

maiores informações:

Oracle/PLSQL: TO_DATE Function

Clever_Anjos
Employee
Employee

Qual o erro específico? Pelo código fica mais fácil identificar.

Oracle possui a função YEAR YEAR function

Not applicable
Author

Bom dia,

Tudo vai depender do formate que é passado para a variável "DAT_LIMITE".

Se você desejar retornar registros em que apenas o ano seja maior que "DAT_LIMITE = 2014", no oracle ficaria assim

SELECT *

FROM DUAL

WHERE TO_NUMBER(TO_CHAR('sysdate', 'yyyy')) > '$(DAT_LIMITE)'

Se o valor da sua variável é uma data sem os campos de horas (DAT_LIMITE = 01/02/2014) ficaria assim:

SELECT *

FROM DUAL

WHERE TRUNC(sysdate) > '$(DAT_LIMITE)'.

Abraços

Not applicable
Author

Pode me auxiliar a colocar isto numa clausa select

Select * from tabela from where .......

srchagas
Creator III
Creator III

Amigo sem querer parecer rude mas isso ja foi segue a lista de exemplo:

Exmeplo 1 -

Select * from tabela where DAT_EMIS_DOCTO >= TO_DATE('$(DAT_LIMITE)','DD/MM/YYYY HH24:MI:SS')


Exemplo 2 -

Select * from tabela WHERE TO_DATE(DAT_EMIS_DOCTO,'DD/MM/YYYY HH24:MI:SS') >=TO_DATE(''$(DAT_LIMITE)','DD/MM/YYYY HH24:MI:SS')


Exemplo 3 -

SELECT *

FROM DUAL (troque DUAL por sua tabela)

WHERE TO_NUMBER(TO_CHAR('sysdate', 'yyyy')) > '$(DAT_LIMITE)'

Sysdate = Ano atual, função do própria do banco que pega isso.

Exemplo 4 -

SELECT *

FROM DUAL (troque DUAL por sua tabela

WHERE TRUNC(sysdate) > '$(DAT_LIMITE)'.

Sysdate = Ano atual, função do própria do banco que pega isso.