虽然使用了AM,但是“AM/A.M。或PM/P.M。required”错误
我在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?
实际上,您是否正在使用TO_TIMESTAMP_TZ
- 因为该列是WITH TIME ZONE的时间戳,并且输入字符串和格式模型都用于时间戳WITH TIME ZONE? (如果您使用的是TO_TIMESTAMP
,那么您将得到不同的错误,例如“日期格式无法识别” - 因为您无法在格式模型中将时区格式元素用于无时区的时间戳)。
假设是这种情况:问题是由输入字符串中传入PM
(无点)引起的,但在格式模型中有A.M.
(带点)。在两个地方使用相同的格式 - 无论是有点还是没有它们,但要一致。
在某些地方,Oracle不会为不匹配的分隔符而大惊小怪,但在这种情况下它确实如此。如果你喜欢,你可以通过文档搜索,找出甲骨文将尝试的替代方案;但这听起来像是一次学术演习。只要输入字符串和格式模型保持一致,你就不会有任何问题。
非常感谢您的回复,并且很抱歉对此很晚了。我最终更改了Oracle SQL Developer中的默认时间戳显示格式,并将其更改为“YYYY-MM-DD HH24.MI.SSXFF”,并将时间戳改为时区“YYYY-MM-DD HH24.MI.SSXFF TZR”。我从工具 - >首选项 - >数据库 - > NLS – 300
@ 300 - 大多数开发人员更喜欢24小时格式(减少混淆,减少像这样的恼人规则的机会)。上午/下午将用于非技术性的“消费者”报告。 – mathguy