我有一個格式爲24-JuL-11 10.45.00.000000000 AM的數據庫中的時間戳數據類型,並希望將其轉換爲unix時間戳,我該如何獲取它?轉換時間戳數據類型爲unix時間戳Oracle
回答
這個問題是相當多的Convert Unixtime to Datetime SQL (Oracle)
逆賈斯汀洞說:
有沒有內置的功能。但是編寫 就比較容易。由於UNIX時間戳是自1月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>
有3,600秒的差距,即1小時。
我意識到一個答案已被接受,但我認爲應該明確,該答案中的函數不考慮傳入日期的時區偏移量。一個適當的Unix時間戳應在GMT(+0)計算。除非另有說明,Oracle的to_date
函數假定傳入的日期位於本地時區。夏令時是真實的事實,這個問題更加嚴重。我來到過這個問題有以下功能:
create or replace
function unix_time_from_date
(
in_date in date,
in_src_tz in varchar2 default 'America/New_York'
)
return integer
as
ut integer := 0;
tz varchar2(8) := '';
tz_date timestamp with time zone;
tz_stmt varchar2(255);
begin
/**
* This function is used to convert an Oracle DATE (local timezone) to a Unix timestamp (UTC).
*
* @author James Sumners
* @date 01 February 2012
*
* @param in_date An Oracle DATE to convert. It is assumed that this date will be in the local timezone.
* @param in_src_tz Indicates the time zone of the in_date parameter.
*
* @return integer
*/
-- Get the current timezone abbreviation (stupid DST)
tz_stmt := 'select systimestamp at time zone ''' || in_src_tz || ''' from dual';
execute immediate tz_stmt into tz_date;
select
extract(timezone_abbr from tz_date)
into tz
from dual;
-- Get the Unix timestamp
select
(new_time(in_date, tz, 'GMT') - to_date('01-JAN-1970', 'DD-MM-YYYY')) * (86400)
into ut
from dual;
return ut;
end unix_time_from_date;
我有一些伴侶功能,unix_time
和unix_time_to_date
,可在http://jrfom.com/2012/02/10/oracle-and-unix-timestamps-revisited/。我無法相信甲骨文在沒有實現這一點的情況下一直到11g。
日期:
FUNCTION date_to_unix (p_date date,in_src_tz in varchar2 default 'Europe/Kiev') return number is
begin
return round((cast((FROM_TZ(CAST(p_date as timestamp), in_src_tz) at time zone 'GMT') as date)-TO_DATE('01.01.1970','dd.mm.yyyy'))*(24*60*60));
end;
的時間戳:
FUNCTION timestamp_to_unix (p_time timestamp,in_src_tz in varchar2 default 'Europe/Kiev') return number is
begin
return round((cast((FROM_TZ(p_time, in_src_tz) at time zone 'GMT') as date)-TO_DATE('01.01.1970','dd.mm.yyyy'))*(24*60*60));
end;
這就是我想出了:
select substr(extract(day from (n.origstamp - timestamp '1970-01-01 00:00:00')) * 24 * 60 * 60 +
extract(hour from (n.origstamp - timestamp '1970-01-01 00:00:00')) * 60 * 60 +
extract(minute from (n.origstamp - timestamp '1970-01-01 00:00:00')) * 60 +
trunc(extract(second from (n.origstamp - timestamp '1970-01-01 00:00:00')),0),0,15) TimeStamp
from tablename;
FWIW
SELECT
to_char(sysdate, 'YYYY/MM/DD HH24:MI:SS') dt,
round((sysdate - to_date('19700101 000000', 'YYYYMMDD HH24MISS'))*86400) as udt
FROM dual;
總是建議爲您的代碼添加一些解釋,特別是爲什麼它與其他答案不同,如果已經有很多 – Bowdzone
我使用下面的方法,它不同於一點點從其他的答案,因爲它使用sessiontimezone()
功能正常獲取日期
select
(
cast((FROM_TZ(CAST(in_date as timestamp), sessiontimezone) at time zone 'GMT') as date) -- in_date cast do GMT
-
TO_DATE('01.01.1970','dd.mm.yyyy') -- minus unix start date
)
* 86400000 -- times miliseconds in day
from dual;
SELECT (SYSDATE - TO_DATE('01-01-1970 00:00:00', 'DD-MM-YYYY HH24:MI:SS')) * 24 * 60 * 60 * 1000 FROM DUAL
- 1. Python:將Varbinary類型的時間戳轉換爲unix時間戳
- 2. 將時間轉換爲Unix時間戳
- 3. 轉換天unix時間戳
- 4. 轉換Unix時間戳
- 5. Rapidminer:轉換unix時間戳
- 6. 轉換Unix時間戳STR和STR到UNIX時間戳在python
- 7. 將unix時間戳轉換爲H2時間戳
- 8. 如何將時間戳轉換爲php中的unix時間戳?
- 9. 將時間戳轉換爲時間戳
- 10. 將Unix時間戳轉換爲時區?
- 11. Unix時間戳的時間轉換
- 12. oracle時間戳轉換爲postgres時間戳?
- 13. Oracle使用UNIX時間戳
- 14. 將datetime轉換爲unix時間戳
- 15. 轉換爲unix時間戳Python
- 16. 將unix時間戳轉換爲julian
- 17. 將Unix時間戳轉換爲MySQL DATETIME
- 18. 將UTC轉換爲Unix時間戳
- 19. 轉換爲unix時間戳不正確
- 20. PHP日期轉換爲unix時間戳
- 21. MySQL將datetime轉換爲Unix時間戳
- 22. 將db2 datestamp轉換爲Unix時間戳
- 23. 將日期轉換爲UNIX時間戳
- 24. 如何將unix時間戳轉換爲人類可讀時間?
- 25. 轉換Unix紀元時間戳到MySQL時間戳PHP
- 26. 在Python轉換時間戳UNIX時間戳
- 27. 如何在UNIX中將UNIX時間戳轉換爲EST時間?
- 28. 時間戳數據類型
- 29. 轉換Unix的時間戳小時
- 30. Python unix時間戳轉換和時區
我傳遞給PDATE價值來自 $ SQL =選擇TO_DATE(TO_CHAR(fld_from_date,'DD-Mon-YY HH:MI:SS AM'),'DD-Mon-YY HH:MI:SS AM')AS date_for_unix_timestamp) 假設TO_CHAR(fld_from_date,'DD- YY HH:MI:SS AM')在上面的查詢結果'08 - Mar-12 01:00:00 AM',這個char的to_date covesrion出來只是'08 -Mar-12',什麼是HH:MI:SS(01:00:00 AM)沒有出現的原因? – deepti
嗨@deepti,沒有必要發佈另一個答案。您可以隨時點擊您問題上的修改鏈接並在此處進行更改。評論也留下了通知。我已經更新了我的答案;缺乏可見性可能只是與您的客戶有關? – Ben
學習時間和閏秒我不得不說你的程序化解決方案是正確的,但引用的Unix時間定義並不是:Unix時間不是自1.1.1970以來的秒數,而是「1.1天以來的天數」。 1970年代60 * 60 * 24加上今天午夜以來的秒數! – Falco