Diese Frage ist so ziemlich das Gegenteil von Unixtime in Datetime SQL konvertieren (Oracle)
Wie Justin Cave sagt:
Es gibt keine eingebauten Funktionen. Aber es ist relativ einfach, eine zu schreiben. Da ein Unix-Zeitstempel die Anzahl der Sekunden seit dem 1. Januar 1970 ist
Da das Subtrahieren eines Datums von einem anderen Datum die Anzahl der Tage zwischen ihnen ergibt, können Sie Folgendes tun:
create or replace function date_to_unix_ts( PDate in date ) return number is
l_unix_ts number;
begin
l_unix_ts := ( PDate - date '1970-01-01' ) * 60 * 60 * 24;
return l_unix_ts;
end;
Da es in Sekunden ist seit 1970 spielt die Anzahl der Sekundenbruchteile keine Rolle. Sie können es jedoch immer noch mit einem Zeitstempel-Datentyp aufrufen ...
SQL> select date_to_unix_ts(systimestamp) from dual;
DATE_TO_UNIX_TS(SYSTIMESTAMP)
-----------------------------
1345801660
Als Antwort auf Ihren Kommentar:Es tut mir leid, aber ich sehe dieses Verhalten nicht:
SQL> with the_dates as (
2 select to_date('08-mar-12 01:00:00 am', 'dd-mon-yy hh:mi:ss am') as dt
3 from dual
4 union all
5 select to_date('08-mar-12', 'dd-mon-yy')
6 from dual )
7 select date_to_unix_ts(dt)
8 from the_dates
9 ;
DATE_TO_UNIX_TS(DT)
-------------------
1331168400
1331164800
SQL>
Es gibt 3.600 Sekunden Unterschied, also 1 Stunde.