我需要將sysdate轉換爲oracle中的13位數字(Unix時間戳編號)。 請爲此共享sql。將sysdate轉換爲13位數字oracle sql
例如:1486015200000 日期:2017年2月2日
的號碼參考,使用1486015200000以下鏈接 http://www.timestampconvert.com/
我需要將sysdate轉換爲oracle中的13位數字(Unix時間戳編號)。 請爲此共享sql。將sysdate轉換爲13位數字oracle sql
例如:1486015200000 日期:2017年2月2日
的號碼參考,使用1486015200000以下鏈接 http://www.timestampconvert.com/
原則上這是很簡單:以任何日期。減去日期文字date '1970-01-01'
。將括號中的差值括起來並乘以86400000.
即:日期差異(在Oracle中)以天爲單位。一天有24 * 24 * 60 = 86,400秒和86,400,000毫秒。 13位數的「unix時間」是1970年1月1日午夜以來經過的毫秒數。
您鏈接到已關閉6小時在網站上計算,所以我假定你在美國中央時區住的地方(或者是其他地方在同一個時區,在北美或中美或南美)。該網站假設輸入是在您的時區。在Oracle中,日期是抽象的,它們不是「在時區中」。
select sysdate, (sysdate - date '1970-01-01') * 86400000 as unix_time from dual;
SYSDATE UNIX_TIME
------------------- -------------
03/16/2017 15:17:32 1489677452000
只有當您的數據庫服務器在UTC時區上運行時,此查詢纔會返回正確的結果,否則它是錯誤的。在這種情況下,您必須首先將「sysdate」轉換爲UTC(或將'1970-01-01 00:00:00 UTC'轉換爲當地時間) –
網頁http://www.timestampconvert.com/進行正確的轉換,它表示預計當地時間。當我(住在歐洲)輸入Unix時間'00'時,我得到'1970-01-01 01:00:00'當地時間'1970-01-01 00:00:00 UTC' –
@ WernfriedDomscheit - 我同意網站做出正確的轉換。我的觀點(我應該更加明確)是將Oracle日期轉換爲Unix時間的整個概念是無效的。 Unix時間是「在特定的時區」。 Oracle日期不是。根據服務器時區轉換Oracle日期絕對沒有意義; Oracle日期與服務器時區或任何其他時區無關。什麼是合理的是在Unix時間和Oracle時間戳之間進行轉換(或使用本地時區)。 – mathguy
這應該工作:
SELECT (COLUMN_WITH_ORACLE_DATE_VALUE - TO_DATE('1970-01-01', 'YYYY-MM-DD')) * 86400000 FROM DUAL;
例如:
SELECT (TO_DATE('02/02/2017','MM/DD/YYYY') - TO_DATE('01/01/1970', 'MM/DD/YYYY')) * 86400000 FROM DUAL;
UNIX產生的時間戳的方式,這是自一月的午夜協調世界時(UTC)經過的秒數1,1970.
您應該可以使用
select (
timestamp '1970-01-01 00:00:00 GMT' + numtodsinterval(1486015200000 /1000, 'SECOND'))
at LOCAL
from dual;
可能考慮時區的唯一正確答案。不過,我認爲這個問題是相反的。 –
@WernfriedDomscheit - 我不明白關於「時區」的評論。我的答案肯定包含對此的評論 - 並且還指出,在Oracle中,DATE數據類型不包含有關「時區」的信息,所以我不確定您的意思。 – mathguy
請張貼的例子。如果當前時間是3/16/2017 3:52:PM EST,那麼13位數字會是什麼,爲什麼? –
日期:02/02/2017 number:1486015200000 – dreambigcoder
這是爲什麼那個日期? –