2009-10-29 16 views
27

Sto cercando di trovare un numero intero di giorni tra due date in Oracle 11g.Come posso ottenere il numero di giorni tra 2 date in Oracle 11g?

posso ottenere vicino facendo

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

ma questo restituisce un intervallo, e non sono stato fusione successo questo ad un numero intero.

Modifica: Apparentemente in 10g, restituisce il numero di giorni come numero intero.

+3

che SQL dovrebbe restituire un valore numerico, non un intervallo – skaffman

+0

possibile duplicato [Prendi il numero di giorni tra due date in Oracle, comprensivo delle date ] (http://stackoverflow.com/questions/20721413/get-the-number-of-days-between-two-dates-in-oracle-inclusive-of-the-dates) –

risposta

11

L'ho capito da solo. Ho bisogno

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

Strano. Come per gli altri rispondenti, quando faccio la tua domanda originale, ottengo un numero, non un intervallo. E quando provo la tua soluzione, ottengo un errore, ORA-30076: campo di estrazione non valido per la fonte di estrazione. Questo è in Oracle 10g; quale versione stai usando? –

+0

11g. Potrebbe essere così. Grazie Dave. –

+0

L'uso di systimestamp invece di sysdate significa che fa il timestamp piuttosto che l'aritmetica delle date, il che dà come risultato INTERVAL. Ma non posso riprodurre la tua esperienza con sysdate. –

3

Puoi provare a utilizzare:

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

trunc() non ha funzionato per me. Ho ricevuto questo errore: tipi di dati incoerenti: numero atteso, INTERVALLO GIORNO SECONDO –

+0

oh sì .. perché non hai la parte HH24: MI: SS nel secondo appuntamento ... lieto averlo capito da solo –

32

Oppure si potrebbe aver fatto questo:

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

Ciò restituisce un numero di giorni interi:

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

Questo restituisce ancora un INTERVAL DAY TO SECOND –

+0

No, no, cosa te lo dice? –

+0

Prova che restituisce un NUMERO e non un GIORNO AL SECONDO INTERVALLO aggiunto alla risposta. –

1

Questo funzionerà ho provato me stesso.
Dà differenza tra sysdate e la data recuperata dalla colonna admitdate

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 
Problemi correlati