Oracle
 sql >> Base de données >  >> RDS >> Oracle

Convertir le type de données d'horodatage en horodatage unix Oracle

Cette question est à peu près l'inverse de Convert Unixtime to Datetime SQL (Oracle)

Comme le dit Justin Cave :

Il n'y a pas de fonctions intégrées. Mais il est relativement facile d'en écrire un. Puisqu'un horodatage Unix est le nombre de secondes depuis le 1er janvier 1970

Comme la soustraction d'une date à une autre donne le nombre de jours entre elles, vous pouvez faire quelque chose comme :

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;

Comme c'est en secondes depuis 1970, le nombre de fractions de seconde est sans importance. Vous pouvez toujours l'appeler avec un type de données d'horodatage...

SQL> select date_to_unix_ts(systimestamp) from dual;

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

En réponse à votre commentaire, je suis désolé mais je ne vois pas ce comportement :

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>

Il y a 3 600 secondes d'écart, soit 1 heure.