无法在Oracle 11g中将String转换为日期

时间:2016-12-18 13:18:43

标签: oracle date oracle11g

我正在尝试从用户输入中将Date插入表中,但有些东西不起作用。

我有以下查询:

    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月1日

对我来说似乎没问题,但我有以下错误:

  

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

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

祝你好运, 斯托。

1 个答案:

答案 0 :(得分: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执行相同操作。

祝你好运。