2017-10-13 400 views
0

我在oracle 12c上有table_name,它的column_name1的數據類型爲「TIMESTAMP(6)WITH TIME ZONE」。我正在使用SQL Developer。雖然使用了AM,但是「AM/A.M。或PM/P.M。required」錯誤

當我使用SQL Developer從這個column_name1中選擇任何東西時,我會看到類似於:19-SEP-17 03.19.55.000000000 PM +00:00這個日期是UTC。

如果我在我的SQL中使用相同的格式,並將它作爲字符串在where子句中工作正常。例如:

select column_name1 from table_name where column_name1 = '19-SEP-17 03.19.55.000000000 PM +00:00'; 

但我知道建議在這種情況下將字符串轉換爲日期。所以當我嘗試使用TO_TIMESTAMP執行此操作時,我無法找到在SQL中添加的正確格式。

我曾嘗試是:

select column_name1 from table_name where column_name1 = TO_TIMESTAMP('19-SEP-17 03.19.55.000000000 PM +00:00', 'DD-MON-YYYY HH:MI:SS.FF A.M. TZH:TZM'); 

而且即使AM/PM已經在那裏,我仍然得到錯誤爲: AM/A.M. or PM/P.M. required

我已經嘗試添加 'NLS_DATE_LANGUAGE =美國',以及但仍然有相同的錯誤。

我在這裏錯過了什麼?如何更改TO_TIMESTAMP格式,以便將此字符串轉換爲TIMESTAMP?

回答

3

實際上,您是否正在使用TO_TIMESTAMP_TZ - 因爲該列是WITH TIME ZONE的時間戳,並且輸入字符串和格式模型都用於時間戳WITH TIME ZONE? (如果您使用的是TO_TIMESTAMP,那麼您將得到不同的錯誤,例如「日期格式無法識別」 - 因爲您無法在格式模型中將時區格式元素用於無時區的時間戳)。

假設是這種情況:問題是由輸入字符串中傳入PM(無點)引起的,但在格式模型中有A.M.(帶點)。在兩個地方使用相同的格式 - 無論是有點還是沒有它們,但要一致。

在某些地方,Oracle不會爲不匹配的分隔符而大驚小怪,但在這種情況下它確實如此。如果你喜歡,你可以通過文檔搜索,找出甲骨文將嘗試的替代方案;但這聽起來像是一次學術演習。只要輸入字符串和格式模型保持一致,你就不會有任何問題。

+0

非常感謝您的回覆,並且很抱歉對此很晚了。我最終更改了Oracle SQL Developer中的默認時間戳顯示格式,並將其更改爲「YYYY-MM-DD HH24.MI.SSXFF」,並將時間戳改爲時區「YYYY-MM-DD HH24.MI.SSXFF TZR」。我從工具 - >首選項 - >數據庫 - > NLS – 300

+0

@ 300 - 大多數開發人員更喜歡24小時格式(減少混淆,減少像這樣的惱人規則的機會)。上午/下午將用於非技術性的「消費者」報告。 – mathguy

相關問題