Câu hỏi này tương đối nghịch với Chuyển đổi Unixtime sang SQL Datetime (Oracle)
Như Justin Cave nói:
Không có chức năng cài sẵn. Nhưng nó tương đối dễ viết. Vì dấu thời gian Unix là số giây kể từ ngày 1.1970 tháng 1
Vì trừ một ngày cho một ngày khác dẫn đến số ngày giữa chúng, bạn có thể làm điều gì đó như:
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;
Như nó trong giây kể từ năm 1970 số giây phân số là phi vật chất. Bạn vẫn có thể gọi nó bằng kiểu dữ liệu dấu thời gian ...
SQL> select date_to_unix_ts(systimestamp) from dual;
DATE_TO_UNIX_TS(SYSTIMESTAMP)
-----------------------------
1345801660
Để trả lời nhận xét của bạn, tôi xin lỗi nhưng tôi không thấy hành vi đó:
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>
Chênh lệch 3.600 giây, tức là 1 giờ.