Tato funkce v Oracle RDMBS neexistuje; jasně to bylo v Oracle Lite (se kterým jsem se nikdy nesetkal) a věřím, že je to i v jiných databázích, jako je MySQL.
Existuje dokumentace týkající se aritmetika data, času a intervalu který vás dostane na část cesty tam; můžete buď odečíst jedno časové razítko od druhého; nebo jedno datum od druhého nebo kombinace obou – ale je jednodušší držet se jednoho datového typu. Podle toho, co použijete, získáte buď interval, nebo číslo představující počet dní:
SQL> SELECT CURRENT_TIMESTAMP - TIMESTAMP '1998-12-09 00:00:00' FROM DUAL;
CURRENT_TIMESTAMP-TIMESTAMP'1998-12-0900:00:00'
---------------------------------------------------------------------------
+000006169 16:16:21.287166000
SQL> SELECT CURRENT_DATE - DATE '1998-12-09' FROM DUAL;
CURRENT_DATE-DATE'1998-12-09'
-----------------------------
6169.67775
Pokud chcete pouze počet celých dní, můžete použít extract()
aby interval získal pouze prvek, který chcete, nebo trunc()
pro číslo k odstranění zlomkové části:
SQL> SELECT EXTRACT(DAY FROM CURRENT_TIMESTAMP - TIMESTAMP '1998-12-09 00:00:00') FROM DUAL;
EXTRACT(DAYFROMCURRENT_TIMESTAMP-TIMESTAMP'1998-12-0900:00:00')
---------------------------------------------------------------
6169
SQL> SELECT TRUNC(CURRENT_DATE - DATE '1998-12-09') FROM DUAL;
TRUNC(CURRENT_DATE-DATE'1998-12-09')
------------------------------------
6169
Můžete také trunc()
aktuální datum před porovnáním, chcete-li, takže porovnáváte oba o půlnoci, což znamená, že nebude nutné odstranit zlomkovou část dne:
SQL> SELECT TRUNC(CURRENT_DATE) - DATE '1998-12-09' FROM DUAL;
TRUNC(CURRENT_DATE)-DATE'1998-12-09'
------------------------------------
6169
Pro pevné datum jsem použil datové literály ANSI, ale můžete použít existující proměnnou nebo sloupec data nebo časového razítka; nebo to_date()
nebo to_timestamp()
pokud máte řetězec v jiném formátu.
Můžete také použít extract()
chcete-li převést složky intervalu na kombinovanou hodnotu, jak je uvedeno zde
; a také se ujistěte, že víte o rozdílu mezi current_date
a sysdate
a ekvivalenty časového razítka
.