【问题标题】:unable to insert when the input month is august in sqlplussqlplus中输入月份为八月时无法插入
【发布时间】:2014-05-26 19:31:22
【问题描述】:

我有一个表格,其中有一个日期数据类型的字段。每当我尝试插入八月份的记录时,sqlplus都会报错

insert into hcheckin values ('T00003','C00003',to_date('11-AUG-2006'),'0800');

这是错误信息:

ORA-01858: a non-numeric character was found where a numeric was expected

但是当我输入这条记录时:

insert into hcheckin values ('T00001','C00001',to_date('08-JUN-2006'),'0900');

没有错误。我也试过其他月份。只有当我插入带有 AUG 的月份数据时才会出错。

请帮忙

【问题讨论】:

  • 桌子上有触发器吗?

标签: sql oracle insert oracle11g sqlplus


【解决方案1】:

您应该依赖默认日期格式,但要明确指定它:

INSERT INTO hcheckin 
VALUES ('T00003', 'C00003', TO_DATE('11-AUG-2006', 'DD-MON-YYYY'), '0800');

根据@a_horse_with_no_name 的评论,更安全的方法是使用数字而不是月份名称(或其缩写):

INSERT INTO hcheckin 
VALUES ('T00003', 'C00003', TO_DATE('11-08-2006', 'DD-MM-YYYY'), '0800');

【讨论】:

  • 这仍然不是 100% 的故障安全。使用不同的语言设置,这仍然会失败(因为它并不总是AUG)。使用数字而不是本地化月份名称更安全
  • @a_horse_with_no_name 好点 - 我在回答中添加了这个警告。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-06
  • 2019-09-27
  • 1970-01-01
  • 2015-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多