Oracle
 sql >> база данни >  >> RDS >> Oracle

Преобразувайте типа данни за времеви отпечатъци в unix времеви печат Oracle

Този въпрос е до голяма степен обратният на Convert Unixtime to Datetime SQL (Oracle)

Както казва Джъстин Кейв:

Няма вградени функции. Но е сравнително лесно да се напише. Тъй като времевата марка на Unix е броят на секундите от 1 януари 1970 г.

Тъй като изваждането на една дата от друга дата води до броя дни между тях, можете да направите нещо като:

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;

Тъй като е за секунди от 1970 г. броят на частните секунди е без значение. Все пак можете да го извикате с тип данни с времева марка...

SQL> select date_to_unix_ts(systimestamp) from dual;

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

В отговор на вашия коментар съжалявам, но не виждам това поведение:

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>

Има 3600 секунди разлика, т.е. 1 час.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. оракул varchar към номер

  2. Вземете името на месеца от датата в Oracle

  3. Принудително използване на индекс в Oracle

  4. какво се случва във фазата на осиновяване подгответе

  5. Enterprise Manager 11g FMW Control в R12.2