2009-10-29 5 views
27

Ich versuche eine ganze Zahl von Tagen zwischen zwei Daten in Oracle 11g zu finden.Wie kann ich die Anzahl der Tage zwischen 2 Daten in Oracle 11g erhalten?

Ich kann tun

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

nahe kommen, aber das gibt ein Intervall, und ich habe nicht die erfolgreiche Casting auf eine ganze Zahl gewesen.

Edit: Offenbar in 10g gibt dies die Anzahl der Tage als eine ganze Zahl zurück.

+3

dass SQL einen numerischen Wert zurückgeben sollte, kein Intervall – skaffman

+0

möglich Duplikat [Gibt die Anzahl der Tage zwischen zwei Daten in Oracle, einschließlich der Termine ] (http://stackoverflow.com/questions/20721413/get-the-number-of-days-between-two-dates-in-oracle-inclusive-of-the-dates) –

Antwort

11

Ich habe es selbst herausgefunden. Ich brauche

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

Seltsam. Wie bei den anderen Beantwortern, wenn ich Ihre ursprüngliche Abfrage mache, bekomme ich eine Nummer, kein Intervall. Und wenn ich Ihre Lösung versuche, erhalte ich einen Fehler, ORA-30076: ungültiges Extraktionsfeld für die Extraktquelle. Dies ist in Oracle 10g; Welche Version verwendest du? –

+0

11g. Das könnte es sein. Danke Dave. –

+0

Die Verwendung von systimestamp anstelle von sysdate bedeutet, dass es Zeitstempel statt Datumsarithmetik verwendet, was zu INTERVALs führt. Aber ich kann deine Erfahrung mit sysdate nicht reproduzieren. –

3

Sie können versuchen, mit:

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

Trunc() hat nicht für mich arbeiten. Ich habe diesen Fehler: inkonsistente Datentypen: erwartete NUMMER, bekam INTERVALL TAG ZU SECOND –

+0

oh yeah .. weil Sie nicht haben die HH24: MI: SS Teil in der zweiten date .. froh, dass Sie es herausgefunden haben –

32

Oder Sie dies getan haben könnte:

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

Diese eine Anzahl ganzer Tage zurück:

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

Dies gibt immer noch eine INTERVALL TAG ZU SECOND –

+0

Nein, tut es nicht, was lässt Sie das sagen? –

+0

Beweisen Sie, dass es eine NUMBER und nicht einen INTERVAL DAY TO SECOND zur Antwort hinzugefügt zurückgibt. –

1

Das wird funktionieren Ich habe mich selbst getestet.
Es gibt Unterschied zwischen sysdate und Datum abgerufen aus Spalte 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 
Verwandte Themen