2016-12-18 69 views
1

我试图从用户输入中将日期插入表中,但某些操作不起作用。无法将字符串转换为Oracle 11g中的日期

我有以下查询:

INSERT INTO DOCTORS.TREATMENTS 
    (START_OF_TREATMENT, END_OF_TREATMENT, DOCTORS_ID,PACIENTS_ID, DIAGNOSIS_ID) 
    VALUES (TO_DATE(&startdate, 'yyyy/mm/dd'), TO_DATE(&enddate, 'yyyy/mm/dd'), 3, 1, 1); 

开始日期我设置:

2000年10月1日

而对于结束日期,我设置:

2000/11/01

这似乎确定了我,但我已经得到了以下错误:

错误报告 - ORA-01858:一个非数字字符被发现,其中一个数字预计 ORA-06512 :在“SYS.STANDARD”,第167行 ORA-06512:在第2行 01858. 00000 - “在预期数字的位置发现了一个非数字字符” *原因:要使用日期转换的输入数据格式模型是 不正确。输入数据不包含格式模型所需的号码为 的数字。 *操作:修复输入数据或日期格式模型以确保 元素在数量和类型上匹配。然后重试该操作。

任何人都可以向我解释为何发生此错误。

此致敬礼, Petar。

+0

这两个字段的类型都是Date。 –

+0

'2000/10/01 == 200' – Bohemian

+1

你确定这是你得到的错误信息吗?我尝试了这个表达式(没有缺少单引号,请参阅Bob的答案),并且我得到了一个不同的错误消息,ORA-01840,*输入值不够长,不适合日期格式。*的确,这是我期望的消息,因为 - 正如@波希米亚所说 - 甲骨文将首先用数字200代替你给它的表达。鲍勃给了你正确的方式来纠正你的代码,但为什么你得到了错误,你做的仍然不清楚。 – mathguy

回答

3

传递给TO_DATE的第一个参数的值必须是一个字符串。用您给出的代码替换后的代码看起来像

TO_DATE(2000/10/01, 'yyyy/mm/dd') 

如图所示失败。

解决的办法是把单引号的参数使用,使取代值的字符串,如

TO_DATE('&startdate', 'yyyy/mm/dd') 

这样,当&startdate被取代,你会得到

TO_DATE('2000/10/01', 'yyyy/mm/dd') 

这将按预期工作。

&enddate做同样的事情。

祝你好运。

+0

谢谢,男人! :) –

+0

它不会“如所示”(至少在我的机器上)。在我的系统中,如果替换变量未包含在单引号中,则会得到不同的错误消息 - 请参阅原始帖子下的注释。虽然这是修正代码的正确方法,但它并不能完全解释OP为什么得到了他所做的特定错误消息。 – mathguy