ORA-01855:AM / A.M.或PM / P.M。需要

时间:2012-03-12 09:08:55

标签: oracle date oracle10g nls-lang

我收到错误:ORA-01855: AM/A.M. or PM/P.M. required

当我尝试执行以下查询时。

  INSERT INTO TBL(ID,START_DATE) 
    values (123, TO_DATE ('3/13/2012 9:22:00 AM', 'MM/DD/YYYY HH:MI AM'))

我的START_DATE列的类型为“日期”。

我执行了以下查询并且没有出现任何错误,但在上述问题中仍未成功:

ALTER SESSION SET NLS_DATE_FORMAT = "MM/DD/YYYY HH:MI AM";

2 个答案:

答案 0 :(得分:5)

您的格式掩码必须与您要转换的字符串的格式相匹配。因此,您要么将SS添加到格式掩码中,要么从字符串中删除秒数

INSERT INTO TBL(ID,START_DATE) 
  values (123, TO_DATE ('3/13/2012 9:22:00 AM', 'MM/DD/YYYY HH:MI:SS AM'))

INSERT INTO TBL(ID,START_DATE) 
  values (123, TO_DATE ('3/13/2012 9:22 AM', 'MM/DD/YYYY HH:MI:SS AM'))

如果你想接受一个包含秒的字符串,但你不想在数据库中存储秒数(在这种情况下,Oracle将始终存储0秒),你可以使用TRUNC函数

INSERT INTO TBL(ID,START_DATE) 
  values (123, TRUNC( TO_DATE ('3/13/2012 9:22:00 AM', 'MM/DD/YYYY HH:MI:SS AM'), 'MI') )

答案 1 :(得分:0)

运行表单构建器时出现相同的错误, 通过将Filed DataType从TIME更改为CHAR可以解决此问题。