2009-10-29 16 views
27

Estoy tratando de encontrar un número entero de días entre dos fechas en Oracle 11g.¿Cómo puedo obtener la cantidad de días entre 2 fechas en Oracle 11g?

que pueden acercarse al hacer

select sysdate - to_date('2009-10-01', 'yyyy-mm-dd') from dual 

pero esto devuelve un intervalo, y no se me ha colado esta exitosa a un entero.

Editar: Aparentemente en 10g, esto devuelve el número de días como un número entero.

+3

que SQL debe devolver un valor numérico, no un intervalo – skaffman

+0

posible duplicado de [Obtener el número de días entre dos fechas en Oracle, inclusivo de las fechas ] (http://stackoverflow.com/questions/20721413/get-the-number-of-days-between-two-dates-in-oracle-inclusive-of-the-dates) –

Respuesta

11

Lo descubrí por mi cuenta. Necesito

select extract(day from sysdate - to_date('2009-10-01', 'yyyy-mm-dd')) from dual 
+5

Weird. Al igual que con los otros contestadores, cuando realizo su consulta original, obtengo un número, no un intervalo. Y cuando intento su solución, aparece un error, ORA-30076: campo de extracción no válido para la fuente de extracción. Esto está en Oracle 10g; ¿Qué versión estás usando? –

+0

11g. Eso podría ser. Gracias Dave. –

+0

Usar systimestamp en lugar de sysdate significa que no tiene fecha de aritmética en lugar de fecha, lo que da INTERVAL como resultado. Pero no puedo reproducir tu experiencia con sysdate. –

3

Puedes probar a utilizar:

select trunc(sysdate - to_date('2009-10-01', 'yyyy-mm-dd')) as days from dual 
+0

trunc() no funcionó para mí. Obtuve este error: tipos de datos incoherentes: NÚMERO esperado, tengo DÍA INTERVALO SEGUNDO –

+0

oh sí ... porque no tienes la parte HH24: MI: SS en la segunda fecha ... me alegro de que lo hayas averiguado –

32

O bien, podría haber hecho esto:

select trunc(sysdate) - to_date('2009-10-01', 'yyyy-mm-dd') from dual 

Esto devuelve un número de días enteros:

SQL> create view v as 
    2 select trunc(sysdate) - to_date('2009-10-01', 'yyyy-mm-dd') diff 
    3 from dual; 

View created. 

SQL> select * from v; 

     DIFF 
---------- 
     29 

SQL> desc v 
Name     Null? Type 
---------------------- -------- ------------------------ 
DIFF       NUMBER(38) 
+0

Esto todavía devuelve una DÍA DE INTERVALO A SEGUNDO –

+0

No, no, ¿qué te hace decir eso? –

+0

Prueba de que devuelve un NÚMERO y no un DÍA DE INTERVALO SEGUNDO añadido a la respuesta. –

1

Esto funcionará. He probado yo mismo.
Da diferencia entre sysdate y la fecha obtienen de admitdate columna

TABLE SCHEMA: 
    CREATE TABLE "ADMIN"."DUESTESTING" 
    ( 
    "TOTAL" NUMBER(*,0), 
"DUES" NUMBER(*,0), 
"ADMITDATE" TIMESTAMP (6), 
"DISCHARGEDATE" TIMESTAMP (6) 
    ) 

EXAMPLE: 
select TO_NUMBER(trunc(sysdate) - to_date(to_char(admitdate, 'yyyy-mm-dd'),'yyyy-mm-dd')) from admin.duestesting where total=300 
Cuestiones relacionadas