sql >> Database >  >> RDS >> Oracle

Converteer timestamp datatype naar unix timestamp Oracle

Deze vraag is vrijwel het omgekeerde van Convert Unixtime to Datetime SQL (Oracle)

Zoals Justin Cave zegt:

Er zijn geen ingebouwde functies. Maar het is relatief eenvoudig te schrijven. Aangezien een Unix-tijdstempel het aantal seconden is sinds 1 januari 1970

Omdat het aftrekken van een datum van een andere datum resulteert in het aantal dagen ertussen, kun je zoiets doen als:

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;

Zoals het is in seconden sinds 1970 is het aantal fractionele seconden niet van belang. Je kunt het echter nog steeds bellen met een datatype met een tijdstempel...

SQL> select date_to_unix_ts(systimestamp) from dual;

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

In reactie op uw opmerking, het spijt me, maar ik zie dat gedrag niet:

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>

Er is 3.600 seconden verschil, ofwel 1 uur.



  1. Anoniem TABLE- of VARRAY-type in Oracle

  2. Prestatiemeteritems bewaken via PERFMON | Problemen met SQL Server-prestaties oplossen -3

  3. Query uitvoeren op PostgreSQL met Npgsql en Entity Framework met unaccent

  4. Android:Bulk Insert, wanneer InsertHelper is verouderd