Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Konwertuj typ danych znacznika czasu na znacznik czasu uniksa Oracle

To pytanie jest w dużej mierze odwrotnością konwersji Unixtime do Datetime SQL (Oracle)

Jak mówi Justin Cave:

Brak wbudowanych funkcji. Ale jest to stosunkowo łatwe do napisania. Ponieważ uniksowy znacznik czasu to liczba sekund od 1 stycznia 1970

Ponieważ odjęcie jednej daty od innej daje liczbę dni między nimi, możesz zrobić coś takiego:

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;

Jak to w sekundach od 1970 liczba ułamków sekund jest nieistotna. Jednak nadal możesz to nazwać za pomocą typu danych znacznika czasu...

SQL> select date_to_unix_ts(systimestamp) from dual;

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

W odpowiedzi na Twój komentarz przepraszam, ale nie widzę takiego zachowania:

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>

Różnica wynosi 3600 sekund, czyli 1 godzina.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. GREATEST() Funkcja w Oracle

  2. Konfigurowanie środowiska programistycznego do nauki języka PL/SQL

  3. Jak wpisać znak nowej linii w Oracle?

  4. Znajdowanie ostatniego indeksu ciągu w Oracle

  5. Jaka jest maska ​​formatowania daty Oracle dla stref czasowych?