簡體   English   中英

如何將iso-8601類型的日期插入到Oracle數據庫中

[英]how to insert iso-8601 type date into oracle database

我正在使用Oracle 11g,並試圖弄清楚如何將此日期插入表中。 日期似乎是ISO-8601,但是7個零使我感到困惑。

Insert into myTestTable (myDate) values ('2013-01-22T00:00:00.0000000-05:00');

我試圖格式化日期沒有運氣。 我收到的錯誤是ORA-01861文字與格式字符串不匹配。

首先,該列必須是TIMESTAMP WITH TIME ZONE類型,以保存您要插入的值。 Oracle DATE僅精確到秒,並且不包含時區。

七個零是小數秒。 TIMESTAMP WITH TIME ZONE的默認精度恰好是七個小數位。 要為秒指定三個小數位,請將列定義為TIMESTAMP(3) WITH LOCAL TIME ZONE

SYSTIMESTAMP返回的實際小數位數(服務器上的當前時間戳)取決於操作系統。 我的本地Windows 7 Oracle返回三個有效的小數位,而我的一個客戶機上的Solaris OS返回六個有效的小數位。

至於插入值,如果您做這樣的事情...

insert into myTestTable (myTS) values ('2013-01-22T00:00:00.0000000-05:00');

... Oracle將嘗試使用其當前的NLS_TIMESTAMP_TZ_FORMAT設置轉換時間戳。 您可以這樣查詢設置:

SELECT *
FROM NLS_Session_Parameters
WHERE Parameter = 'NLS_TIMESTAMP_TZ_FORMAT';

PARAMETER               VALUE
----------------------- ----------------------------
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR

我得到的結果是“出廠默認值”。 您的可能是相同的,您會發現它與您指定的格式不匹配,因此轉換失敗。

作為另一個正確答案,您可以使用TO_TIMESTAMP_TZ函數和格式字符串將字符串轉換為時間戳。 您還可以使用ANSI時間戳文字:

insert into myTestTable (myTS)
  values (TIMESTAMP '2013-01-22T00:00:00.0000000-05:00');

Oracle 在此處記錄時間戳文字。 該鏈接涵蓋所有類型的文字,因此您需要在屏幕上向下滾動約三分之二(或進行查找)才能獲得時間戳文字。

這就是答案。

insert into myTestTable (myDate) values 
(to_timestamp_tz('2013-01-22T00:00:00.0000000-05:00',
 'YYYY-MM-DD"t"HH24:MI:SS.FF7TZR'));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM