sql >> Databáze >  >> RDS >> Oracle

Převeďte datový typ časového razítka do unixového časového razítka Oracle

Tato otázka je do značné míry opakem Convert Unixtime to Datetime SQL (Oracle)

Jak říká Justin Cave:

Nejsou zde žádné vestavěné funkce. Ale napsat to je relativně snadné. Protože časová značka Unixu je počet sekund od ledna 1,1970

Protože odečtením jednoho data od jiného data získáte počet dní mezi nimi, můžete udělat něco jako:

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;

Jako v sekundách od roku 1970 je počet zlomkových sekund nepodstatný. Stále jej můžete volat s datovým typem časového razítka...

SQL> select date_to_unix_ts(systimestamp) from dual;

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

V reakci na váš komentář se omlouvám, ale toto chování nevidím:

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>

Rozdíl je 3 600 sekund, tj. 1 hodina.



  1. Existuje v ORACLE způsob, jak spojit více řádků řádků do jednoho, pomocí dvou tabulek, kde jsou konečné hodnoty odděleny čárkami?

  2. Operátor SQL Méně než () pro začátečníky

  3. Funkce NCHR() v Oracle

  4. Jak funguje REGEXP_REPLACE() v MariaDB