代码之家  ›  专栏  ›  技术社区  ›  300

虽然使用AM,但“AM/A.M.或PM/P.M.必需”错误

  •  0
  • 300  · 技术社区  · 8 年前

    我在oracle 12c上有table_name,其列_name 1的数据类型为“TIMESTAMP(6)with TIME ZONE”。我正在使用SQL Developer。

    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\u时间戳进行此操作时,我无法找到要添加到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/A.M. or PM/P.M. required

    我也尝试过添加“nls\u date\u language=american”,但仍然出现相同的错误。

    我错过了什么?如何更改TO\u时间戳格式,以便将此字符串转换为时间戳?

    1 回复  |  直到 8 年前
        1
  •  3
  •   mathguy    8 年前

    实际上,你在使用 TO_TIMESTAMP_TZ -正如您应该做的那样,因为列是带时区的时间戳,输入字符串和格式模型都是带时区的时间戳?(如果您使用 TO_TIMESTAMP

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

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