【问题标题】:Getting this error in sqlplus -- ORA-01855: AM/A.M. or PM/P.M. required在 sqlplus 中出现此错误 -- ORA-01855: AM/A.M.或下午/下午必需的
【发布时间】:2016-09-16 18:36:50
【问题描述】:

我正在执行此查询并收到此错误。请帮忙。

SQL> select to_timestamp((sysdate-1)||'01.00.00.000000000 PM','DD-MON-RR HH.MI.SS.FF PM') from dual;

第 1 行出现错误:ORA-01855:AM/A.M.或下午/下午必填

【问题讨论】:

  • 已删除。你能帮我解决这个问题吗?
  • 抱歉,对Oracle不太了解。
  • 你想得到什么?昨天 01:00:00.00?
  • 试试SELECT TO_CHAR(cast(TRUNC(SYSTIMESTAMP) + INTERVAL '1' HOUR as timestamp), 'DD-MON-RR HH.MI.SS.FF PM') FROM dual;
  • @WernfriedDomscheit 小错误:您的查询返回今天的日期,而 OP 的返回昨天的日期。

标签: sql oracle


【解决方案1】:

当您使用 sysdate 而不进行显式转换时,您假定您的 NLS 设置以 'DD-MON-RR' 格式给出日期。 要构建更安全的查询,请使用带有格式掩码的显式转换:

Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production

SQL> select to_timestamp(to_char(sysdate-1,'DD-MON-RR' ) ||' 01.00.00.000000000 PM','DD-MON-RR HH.MI.SS.FF PM') from dual;

TO_TIMESTAMP(TO_CHAR(SYSDATE-1,'DD-MON-RR')||'01.00.00.000000000PM','DD-MON
---------------------------------------------------------------------------
15-SET-16 13:00:00,000000000

SQL>

【讨论】:

  • 此查询在 sql developer 中运行良好。我想在 sqlplus 中执行这个。在 sqlplus 窗口中,它会抛出错误;
  • thanx alot.. 它有效...抱歉之前的评论...我检查正确...它正在工作..非常感谢
  • @Rahul 如果 Aleksej 的回答解决了您的问题,请接受(使用旁边的复选标记按钮)
猜你喜欢
  • 2012-03-28
  • 2017-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-04
  • 1970-01-01
相关资源
最近更新 更多