" AM / A.M。或PM / P.M。所需"使用AM时出错

时间:2017-10-13 19:55:29

标签: oracle oracle12c timestamp-with-timezone to-timestamp

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

当我使用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');

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

我尝试添加' nls_date_language = american'同样但仍然会得到同样的错误。

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

1 个答案:

答案 0 :(得分:3)

您实际上是否正在使用TO_TIMESTAMP_TZ - 因为该列是时间戳WITH TIME ZONE,输入字符串和格式模型都是时间戳WITH TIME ZONE? (如果您使用TO_TIMESTAMP,则会出现不同的错误,例如“日期格式无法识别” - 因为您不能在格式模型中为时区添加时区格式元素而没有时区)。

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

在某些地方,甲骨文不会对不匹配的分隔符大惊小怪,但在这种情况下确实如此。如果您愿意,可以通过文档查找Oracle将尝试的确切替换;但这听起来像是一次学术练习。只需在输入字符串和格式模型之间保持一致,就不会有任何问题。