2012-03-12 121 views
1

我得到的错误:ORA-01855: AM/A.M. or PM/P.M. requiredORA-01855:AM/A.M。或PM/P.M。要求

当我尝试执行以下查询。

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"; 
+3

当问一个问题然后按编辑窗口顶部的'{}'按钮,您的代码将被格式化,以便阅读。在回答你的问题时,'to_date'有几秒钟,但它们不包含在格式掩码中。 – Ben 2012-03-12 09:16:06

+0

谢谢Ben,我把它格式化了。 – RMN 2012-03-12 09:18:00

+0

本,我不想要SS被保存。我只想保存到分钟,然后上午/下午。 – RMN 2012-03-12 09:18:48

回答

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')) 
+0

我如何从前端删除它。我从前端获取该字符串。有没有一种方法可以改变/只允许字符串来。在前端,它是日期时间格式。 – RMN 2012-03-12 09:29:51

+0

@ RMN-如果你总是希望将秒数存储为0,我更新了我的答案,以包含截断“DATE”到分钟的选项。 – 2012-03-12 09:33:34