sql >> Databasteknik >  >> RDS >> Oracle

Konvertera tidsstämpel datatyp till unix tidsstämpel Oracle

Den här frågan är i stort sett det omvända till Convert Unixtime to Datetime SQL (Oracle)

Som Justin Cave säger:

Det finns inga inbyggda funktioner. Men det är relativt lätt att skriva en. Sedan en Unix-tidsstämpel är antalet sekunder sedan 1 januari 1970

Eftersom att subtrahera ett datum från ett annat datum resulterar i antalet dagar mellan dem kan du göra något som:

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;

Som det är på sekunder sedan 1970 är antalet bråksekunder oväsentligt. Du kan fortfarande kalla det med en tidsstämpeldatatyp...

SQL> select date_to_unix_ts(systimestamp) from dual;

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

Som svar på din kommentar ber jag om ursäkt men jag ser inte det beteendet:

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>

Det är 3 600 sekunders skillnad, dvs 1 timme.



  1. Förbättrar Foreign Key frågeprestanda?

  2. Hantering av samtidiga uppdateringar i viloläge

  3. Fem coola saker jag lärde mig på PostgreSQL Conference Europe 2018

  4. Ska jag skapa en klass som ärver SQLiteOpenHelper för varje tabell i min databas?