"AM/A.M. or PM/P.M. required" 使用 AM 时出错

"AM/A.M. or PM/P.M. required" error though AM is used

我在 oracle 12c 上有 table_name,其中 column_name1 数据类型为 "TIMESTAMP(6) WITH TIME ZONE"。我正在使用 SQL 开发人员。

当我使用 SQL 开发人员 select 来自此 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');

即使 A.M./PM 已经存在,我仍然会收到错误消息: AM/A.M. or PM/P.M. required

我也尝试添加 'nls_date_language=american' 但仍然出现同样的错误。

我在这里错过了什么?如何更改 TO_TIMESTAMP 格式以便将此字符串转换为 TIMESTAMP?

您实际上是否在使用 TO_TIMESTAMP_TZ - 正如您应该的那样,因为该列是 timestamp WITH TIME ZONE,并且输入字符串和格式模型都用于 timestamp WITH TIME ZONE? (如果你像那样使用 TO_TIMESTAMP 你会得到一个不同的错误,比如 "date format not recognized" - 因为你不能在没有时区的时间戳的格式模型中有时区格式元素)。

假设是这样:问题是由于在输入字符串中传递 PM(没有点),但在格式模型中有 A.M.(有点)引起的。在两个地方使用相同的格式 - 带点或不带点,但要保持一致。

在某些地方,Oracle 不会对不匹配的分隔符大惊小怪,但在这种情况下它会。如果您愿意,可以搜索文档以准确找出 Oracle 将尝试进行哪些替换;但这听起来像是一项学术活动。只要输入字符串和格式模型保持一致,就不会有任何问题。