【问题标题】:Oracle Date datatype errorOracle 日期数据类型错误
【发布时间】:2012-04-23 06:27:33
【问题描述】:

我对 Oracle 有点不满意

下面是我的SQL

select * from orders where 
trunc(ordered_date)
between
to_date('01-JAN-12') 
and 
to_date('07-JAN-12')

Ordered_date 是 DATE 数据类型

是否出现以下错误。

Error starting at line 1 in command:
select * from orders
where 
trunc(ordered_date)
between 
to_date('01-JAN-12') 
and 
to_date('07-JAN-12')
Error report:
SQL Error: ORA-01841: (full) year must be between -4713 and +9999, and not be 0
01841. 00000 -  "(full) year must be between -4713 and +9999, and not be 0"
*Cause:    Illegal year entered
*Action:   Input year in the specified range

我很困惑是什么导致了 mu 代码中的这个错误。

任何输入都会很棒。

谢谢!!!

【问题讨论】:

  • 请运行这个:SELECT TO_CHAR(ordered_date,'YYYY') FROM orders 并发布结果。

标签: sql database oracle oracle10g oracle9i


【解决方案1】:

也许您应该将日期(即 DB 日期和 2 个输入日期)转换为相同的格式,如下所示


SELECT *
  FROM ORDERS O
 WHERE TO_DATE(TO_CHAR(O.ORDERED_DATE, 'DD-MON-YY'), 'DD-MON-YY') BETWEEN
       TO_DATE('01-JAN-12', 'DD-MON-YY') AND
       TO_DATE('07-JAN-12', 'DD-MON-YY')

希望对你有帮助

【讨论】:

    【解决方案2】:

    如果您真的使用日期文字,则可以改用以下语法:

    select * from orders where 
    trunc(ordered_date)
    between
    date '2012-01-01'
    and
    date '2012-01-07'
    

    【讨论】:

    • 感谢 Jeffrey,问题仍然存在
    • 所以你仍然得到ORA-01841这个修改后的查询?您确定没有收到其他错误吗?
    【解决方案3】:

    您必须指定日期格式。

    给to_date函数添加一个参数:

     to_date('01-JAN-12', 'DD-Mon-YY')
    

    希望对你有帮助。

    问候。

    【讨论】:

    • 感谢您的意见。但问题仍然存在。
    • @user1141584 - 您能否更新您的问题以显示您在指定格式掩码时遇到的错误?
    猜你喜欢
    • 2015-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多