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

Konverter tidsstempeldatatype til unix-tidsstempel Oracle

Dette spørgsmål er stort set det omvendte af Konverter Unixtime til Datetime SQL (Oracle)

Som Justin Cave siger:

Der er ingen indbyggede funktioner. Men det er relativt nemt at skrive en. Siden et Unix-tidsstempel er antallet af sekunder siden 1. januar 1970

Da at trække en dato fra en anden dato resulterer i antallet af dage mellem dem, kan du gøre noget 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 er i sekunder siden 1970 er antallet af brøksekunder uvæsentligt. Du kan dog stadig kalde det med en tidsstempeldatatype...

SQL> select date_to_unix_ts(systimestamp) from dual;

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

Som svar på din kommentar beklager jeg, men jeg kan ikke se denne adfærd:

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>

Der er 3.600 sekunders forskel, dvs. 1 time.



  1. Opret MySQL-database fra Java

  2. DATE_FORMAT() Eksempler – MySQL

  3. Sådan defineres en auto-inkrementer primær nøgle i SQL Server

  4. ORACLE SQL:Få alle heltal mellem to tal