[英]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.