Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Konvertieren Sie den Zeitstempel-Datentyp in den Unix-Zeitstempel Oracle

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.