2011-12-28 75 views
23

我試圖將時間戳(「1985-02-07T00:00:00.000Z」)轉換爲日期,但我未能成功完成多次嘗試。如何將「1985-02-07T00:00:00.000Z」(ISO8601)轉換爲Oracle中的日期值?

下面是我曾嘗試查詢:

select to_date('1985-02-07T00:00:00.000Z', 'YYYY-MM-DDTHH24:MI:SS.fffZ') 
from dual; 

您的建議將不勝感激。

+2

+1嘗試的東西。你可以通過包括結果是什麼以及它們是錯誤的還是通常不起作用來更好地解決問題。 (是否有錯誤?日期是幾個小時?) – 2011-12-28 09:57:12

+2

根據[to_date](http://www.techonthenet.com/oracle/functions/to_date.php)我相信至少「fff」是錯的應該是「FF3」。但我不使用/有Oracle :) – 2011-12-28 10:01:52

回答

37

to_date將輸入轉換爲不支持小數秒的DATE類型。要使用小數秒,您需要使用類型,該類型在使用時創建to_timestamp

pst有關ff3修飾符的註釋也是正確的。

「恆」 中的格式掩碼值需要用雙引號

所以最後的說法是:

select to_timestamp('1985-02-07T00:00:00.000Z', 'YYYY-MM-DD"T"HH24:MI:SS.ff3"Z"') 
from dual; 
2

一些rules to follow

  1. 文字必須是雙報價:MM預計一個月的數字,"MM"預計雙M。
  2. 小數秒的格式爲FF,而不是FFFF。您可以指定具有尾隨整數的數字位數,例如FF3
  3. 但是日期無論如何都不能持續小數秒,所以在這種情況下您不能使用FF3

這工作:

SELECT TO_DATE('1985-02-07T00:00:00', 'YYYY-MM-DD"T"HH24:MI:SS') 
FROM dual; 

我不知道是否有忽略TO_DATE()所以我用字符串處理函數零點幾秒,以帶他們出去的方式:

SELECT TO_DATE(SUBSTR('1985-02-07T00:00:00.000Z', 1, 19), 'YYYY-MM-DD"T"HH24:MI:SS') 
FROM dual; 
8
SQL> select cast(to_timestamp('1985-02-07T00:00:00.000Z', 'yyyy-mm-dd"T"hh24:mi:ss.ff3"Z"') as date) 
    2 from dual 
    3/

CAST(TO_TIMESTAMP(' 
------------------- 
07-02-1985 00:00:00 

1 row selected. 
2
SELECT to_timestamp_tz('2012-08-08T09:06:14.000-07:00','YYYY-MM-DD"T"HH24:MI:SS.FF3TZR') 
FROM dual; 

External table DDL, 
extract_date char(29) DATE_FORMAT timestamp WITH TIMEZONE mask 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZR' 
+0

很好用_tz函數。我不得不用這個:'YYYY-MM-DD「T」HH24:MI:SS.FF3TZHTZM' – JoshC13 2015-07-09 17:12:00

0

如果你想獲取日期時間格式的字符串那就試試這個....

select to_char(TO_DATE('2012-06-26T00:00:00.809Z', 'YYYY-MM-DD"T"HH24:MI:SS".""ZZZZ"'),'yyyy-MM-dd hh:mm:ss PM') as EVENT_DATE from dual 

EVENT_DATE 
----------------------- 
2012-06-26 12:06:00 AM 

僅日期僅使用...

select TO_DATE('2012-01-06T00:00:00.809Z', 'YYYY-MM-DD"T"HH24:MI:SS".""ZZZZ"') from dual 
相關問題