我有一個用於維護截斷時間的oracle表。這裏我們正在存儲各種證券的截止時間..目前我們是1970年1月1日的截止日期的截止日期。要求是用當前日期替換這個日期部分而不改變截止時間和時區部分。帶時區的Oracle時間戳:將日期部分替換爲當前日期
回答
你可以計算的天數和今天之間1970-01-01,然後添加作爲日常秒的時間間隔,以您的截斷時間戳值:
create table my_table (cutoff timestamp with time zone);
insert into my_table values (timestamp '1970-01-01 18:00:00 -5:00');
select cutoff + numtodsinterval(trunc(sysdate) - date '1970-01-01', 'DAY') as adjusted
from my_table;
ADJUSTED
-----------------------------------
05-JUN-17 18.00.00.000000000 -05:00
,或者如果你願意,您可以直接生成的時間間隔(如@mathguy指出):
select cutoff + (trunc(sysdate) - timestamp '1970-01-01 00:00:00') as adjusted
from my_table;
ADJUSTED
-------------------------
06-JUN-17 18:00:00 -05:00
的-05:00時區偏移忽略夏令時間,當然,不過這似乎是你的原意。
這個想法是正確的,但爲什麼截斷'SYSDATE'並減去一個日期,只是爲了將'NUMTODSINTERVAL'應用到結果?更好:截斷'SYSTIMESTAMP'並減去時間戳文字;結果可以直接添加到'CUTOFF'。 – mathguy
另請參閱我給OP的說明,要求澄清...帶時區的時間戳與UTC偏移,因此使用用戶系統的「當前日期」(如SYSDATE或SYSTIMESTAMP中所示)似乎不自然;相反,應該首先將其轉換爲UTC,然後才截斷。最好,如果OP確認,因爲這不是一個「編碼」問題,這是一個「問題規範」問題。 – mathguy
@mathguy - 不確定它有多大的區別,但確定。 'trunc(systimestamp)'仍然會給你一個日期(所以對'sysdate'沒有太大的好處?),但是從中減去時間戳仍然會給出一個時間間隔。增加了一個版本。我認爲第一個更清晰一點,但要麼知道datetime/interval算法是如何工作的,這似乎不是許多人給出的* 8- –
- 1. 將jms時間戳轉換爲當前日期和時間
- 2. 將日期和時間轉換爲日期+時間戳
- 3. 將日期,日期時間轉換爲時間戳
- 4. Perl - 將日期時間戳轉換爲日期時間對象
- 5. 將日期時間戳轉換爲日期時間
- 6. 將Oracle時間戳轉換爲R中的日期/時間
- 7. 將當前日期轉換爲Unix時間戳,但使用日期
- 8. Oracle日期時間戳轉換
- 9. 如何將當前日期轉換爲紀元時間戳?
- 10. 在Android中將時間戳轉換爲當前日期
- 11. 將unix時期時間戳轉換爲TSQL日期時間
- 12. 將日期轉換爲Matlab時間戳
- 13. PHP將日期轉換爲時間戳
- 14. Bash將日期轉換爲時間戳
- 15. 將EPOCH時間戳轉換爲日期
- 16. 將日期轉換爲時間戳
- 17. 將日期轉換爲UNIX時間戳
- 18. 將日期轉換爲jQuery時間戳
- 19. 將當地日期時間轉換爲UTC日期時間
- 20. 將UTC日期時間轉換爲當地日期時間
- 21. 替換日期時間值的日期部分
- 22. 將MySql日期時間戳轉換爲JavaScript的日期格式
- 23. 獲取當前ISO8601日期/時間戳
- 24. 試圖將日期轉換爲時間戳,但是當我將其轉換回日期時,日期不一致
- 25. 如何將帶時區的JSON日期轉換爲SQL Server日期時間?
- 26. 將Java.util日期轉換爲不帶時區的XML日期
- 27. ORACLE將NVARCHAR2轉換爲日期/時間
- 28. Oracle SQL查詢將Unix時間戳轉換爲Java的日期
- 29. 將任何日期字符串轉換爲不帶時區的時間戳
- 30. 分離的日期和時間的日期時間戳
你可以給一些示例行和清晰的預期輸出。 – Utsav
@Utsav截止列(帶時區數據類型的時間戳)數據就像這樣「1970-01-01 18:00:00 -5:00」。 預期的輸出是「2017-06-03 18:00:09 -5:00」即今天的日期與截止列的時間戳部分 –
這個請求有一個合乎邏輯的問題......「date」沒有很好的定義。應該使用哪個日期? 「這一刻」的日期是2017年6月6日,在美國和歐洲,但是在2017年6月7日,在日本和澳大利亞。由於您使用WITH TIME ZONE時間戳,這些時間戳與UTC偏移,因此從UTC獲取當前日期是有意義的,而不是從SYSDATE和類似的時間。 – mathguy