3

我得到错误: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";
4

2 回答 2

6

您的格式掩码必须与您要转换的字符串的格式相匹配。因此,您要么想添加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') )
于 2012-03-12T09:24:56.667 回答
-1

我在运行表单生成器时遇到了同样的错误,通过将归档数据类型从 TIME 更改为 CHAR 来修复它。

于 2018-09-23T09:25:09.837 回答