请让我知道以下sql查询的问题

时间:2009-08-25 07:10:19

标签: sql oracle plsql ora-01843

SELECT pd_end_dt,nrx_cnt
FROM wkly_lnd.lnd_wkly_plan_rx_summary
WHERE pd_end_dt >TO_DATE('01/01/2009')

给出错误ORA-01843:不是有效月份


我跑了以下它做得很好

SELECT pd_end_dt,nrx_cnt 来自wkly_lnd.lnd_wkly_plan_rx_summary WHERE pd_end_dt> '01 -Jan-09'

但是如果我想要周知道数据怎么做dat

4 个答案:

答案 0 :(得分:4)

您没有向 TO_DATE 提供格式字符串。这可能会导致Oracle错误地处理您的日期。尝试

to_date('01/01/2009', 'DD/MM/YYYY')

相反(取决于你来自哪里,你可能想要改变DD和MM的顺序)。有关详细信息,请参阅this description of the TO_DATE format string argument

答案 1 :(得分:3)

TO_DATE('01/01/2009', 'dd/mm/yyyy')

答案 2 :(得分:0)

好的不要听起来很苛刻,但先做谷歌搜索。以前的答案有效,但是为了更详细的解释,请参阅

http://www.dbmotive.com/oracle_error_codes.php?errcode=01843

如果您打算使用默认格式,那么您应该找出第一个

答案 3 :(得分:0)

有两种可能性:

  1. 由于默认日期格式,TO_DATE函数失败(根据此处已经给出的其他答案)。

  2. pd_end_dt不是日期列。该查询正在尝试将pd_end_dt中的值转换为比较前的日期,并在其中一行上失败。

  3. 演示:

    SQL> create table t1 (datestrings varchar2(10));
    SQL> insert into t1 values ('01/01/2009');
    SQL> insert into t1 values ('02/01/2009');
    SQL> insert into t1 values ('01/XX/2009');
    SQL> select * from t1 where datestrings > '01/01/2009';
    
    DATESTRINGS 
    -----------
    02/01/2009
    01/XX/2009  
    
    2 rows selected
    
    SQL> select * from t1 where datestrings > TO_DATE('01/01/2009');
    
    ORA-01843: not a valid month
    
    SQL> select * from t1 where datestrings > TO_DATE('01/01/2009','DD/MM/YYY');
    
    ORA-01843: not a valid month