【问题标题】:date format picture ends before converting entire input string error日期格式图片在转换整个输入字符串错误之前结束
【发布时间】:2014-09-17 00:29:44
【问题描述】:

我有这个程序:

create or replace Procedure return_rows_LECTURE_BY_DATE (in_date in date, out_cursor OUT SYS_REFCURSOR) As

Begin
     OPEN out_cursor for
     select *
     FROM COURSE_LECTURE
     WHERE LECT_DATE_TIME_START >= to_timestamp(in_date, 'dd-mm-yyyy')
     and       LECT_DATE_TIME_START < to_timestamp(in_date+1, 'dd-mm-yyyy')
    ORDER BY LECT_DATE_TIME_START;
End;

输入:日期,输出:该日期的讲座。 表(视图)中的日期是 TIMESTAMP。

我想运行这个程序。我试过这个:

declare 
k SYS_REFCURSOR;
--t DATE:= to_date('2010-12-14:09:56:53', 'YYYY-MM-DD:HH24:MI:SS') ;
res COURSE_LECTURE%rowtype; 
begin
return_rows_LECTURE_BY_DATE(to_date('2010-12-14', 'YYYY-MM-DD'),k);
loop
  FETCH  k into res;
  Exit when k%notFound;
  DBMS_OUTPUT.PUT_LINE(res.COURSE_NAME );
  end loop;
end;

但是我收到了这个错误:

错误报告 - ORA-01830: 日期格式图片在转换前结束 整个输入字符串 ORA-06512:在“HR.RETURN_ROWS_LECTURE_BY_DATE”, 第 4 行 ORA-06512:第 6 行 01830. 00000 - “日期格式图片在转换整个输入字符串之前结束”

【问题讨论】:

    标签: sql oracle date timestamp procedure


    【解决方案1】:

    您正在使用TO_TIMESTAMP() 将日期转换为时间戳,它采用character as a parameter。您应该改用CAST(),它将一种数据类型转换为另一种数据类型;例如:

    WHERE LECT_DATE_TIME_START >= CAST(in_date AS TIMESTAMP)
    

    您应该对从日期到时间戳的所有转换执行此操作;所以to_timestamp(in_date+1, 'dd-mm-yyyy') 变成了CAST((in_date + 1) AS TIMESTAMP)

    【讨论】:

    • 你能告诉我在哪里吗?我不明白。
    • 求助!这是工作!但我会使用@Maksim Sirothkin,因为我不知道什么是“CAST”。感谢您的帮助。
    • 这是一个荒谬的理由@user3868442;特别是当这是正确答案时。如果你不知道look it up in the documentation.
    【解决方案2】:

    问题在于语句 to_timestamp(in_date, 'dd-mm-yyyy') 提供的格式太短,您可以在没有任何格式条件 to_timestamp(in_date) 的情况下使用它。

    【讨论】:

    • 这是不正确的,它依赖于隐式转换,其结果可能会因会话而异。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-16
    • 1970-01-01
    • 1970-01-01
    • 2010-10-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多