Oracle
 sql >> Database >  >> RDS >> Oracle

Converti il ​​tipo di dati timestamp in unix timestamp Oracle

Questa domanda è praticamente l'inverso di Converti Unixtime in Datetime SQL (Oracle)

Come dice Justin Cave:

Non ci sono funzioni integrate. Ma è relativamente facile scriverne uno. Poiché un timestamp Unix è il numero di secondi dal 1 gennaio 1970

Poiché la sottrazione di una data da un'altra data determina il numero di giorni tra di loro, puoi fare qualcosa del tipo:

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;

Come è in secondi dal 1970 il numero di secondi frazionari è irrilevante. Puoi comunque chiamarlo con un tipo di dati timestamp però...

SQL> select date_to_unix_ts(systimestamp) from dual;

DATE_TO_UNIX_TS(SYSTIMESTAMP)
-----------------------------
                   1345801660

In risposta al tuo commento, mi dispiace ma non vedo quel comportamento:

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>

Ci sono 3.600 secondi di differenza, ovvero 1 ora.