Ich versuche in Oracle 11g eine ganzzahlige Anzahl von Tagen zwischen zwei Datumsangaben zu finden.
Ich kann näher kommen, indem ich tue
select sysdate - to_date('2009-10-01', 'yyyy-mm-dd') from dual
dies gibt jedoch ein Intervall zurück, und ich habe es nicht erfolgreich in eine Ganzzahl umgewandelt.
Bearbeiten: Offensichtlich in 10g gibt dies die Anzahl der Tage als Ganzzahl zurück.
Ich habe es selbst herausgefunden. Ich brauche
select extract(day from sysdate - to_date('2009-10-01', 'yyyy-mm-dd')) from dual
Oder du hättest das tun können:
select trunc(sysdate) - to_date('2009-10-01', 'yyyy-mm-dd') from dual
Dies gibt eine Anzahl von ganzen Tagen 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)
Sie können versuchen mit:
select trunc(sysdate - to_date('2009-10-01', 'yyyy-mm-dd')) as days from dual
Das wird funktionieren, ich habe mich selbst getestet.
Es gibt einen Unterschied zwischen sysdate und dem Datum, das aus dem Spalten-Zulassungsdatum abgerufen wurde
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
Volle Tage zwischen Monatsende und Beginn des heutigen Tages, einschließlich des letzten Tages des Monats:
SELECT LAST_DAY (TRUNC(SysDate)) - TRUNC(SysDate) + 1 FROM dual
Tage zwischen exakter Zeit:
SELECT SysDate - TO_DATE('2018-01-01','YYYY-MM-DD') FROM dual