【问题标题】:Cast as date - literal does not match format string转换为日期 - 文字与格式字符串不匹配
【发布时间】:2014-11-17 08:51:30
【问题描述】:

我有这个选择:

 select P.DT03_DT as PROPOSAL_DATE,
        p.dt02_dt as DATE_OF_JUDGEMENT,
        P.DT05_DT as END_DATE,
        cast('20140704' as date) as Dt  

       from imxdb.t_intervenants i    
         join imxdb.g_indivparam p
       on i.refindividu = p.refindividu

        where p.type = 'BANCRUPTCY'    
         AND (to_char(p.dt02_dt, 'yyyymmdd') ='20140704' or
         to_char(P.DT05_DT, 'yyyymmdd') = '20140704')

这给了我错误:

ORA-01861: 文字与格式字符串不匹配 01861. 00000 - “文字与格式字符串不匹配”

但是当我只是将“cast('20140704' as date) as Dt”这一行注释掉时,它工作正常,为什么?

谢谢

【问题讨论】:

    标签: sql oracle date-formatting


    【解决方案1】:

    问题在于NLS_DATE_FORMAT

    让我用一个小例子来解释:

    我的NLS_DATE_FORMATDD-MON-RR

    SQL> SELECT VALUE FROM V$NLS_PARAMETERS WHERE PARAMETER='NLS_DATE_FORMAT';
    
    VALUE
    ----------------------------------------------------------------
    DD-MON-RR
    
    SQL>
    

    我可以在 SQL*Plus 中验证:

    SQL> SELECT SYSDATE FROM DUAL;
    
    SYSDATE
    ---------
    23-SEP-14
    
    SQL>
    

    现在,如果我使用 CAST 未知格式的日期文字,我会收到错误:

    SQL> SELECT CAST('20140704' AS DATE) AS DT FROM DUAL;
    SELECT CAST('20140704' AS DATE) AS DT FROM DUAL
                *
    ERROR at line 1:
    ORA-01861: literal does not match format string
    
    
    SQL>
    

    所以,我会给所需的NLS_DATE_FORMAT,应该没问题:

    SQL> SELECT CAST('23-sep-14' AS DATE) AS DT  FROM DUAL;
    
    DT
    ---------
    23-SEP-14
    
    SQL>
    

    其他选择,

    • 更改 NLS_DATE_FORMAT
    • 在会话级别更改它。
    • 或者,您可以使用TO_DATE 并使用正确的`FORMAT

    它将OVERRIDElocale-specific NLS settings

    SQL> select to_date('20140704', 'YYYYMMDD') from dual;
    
    TO_DATE('
    ---------
    04-JUL-14
    

    如果您想在您的desired format 中显示,请使用TO_CHAR

    【讨论】:

    • 谢谢你,帮助很大:)
    【解决方案2】:

    换行

    cast('20140704' as date) as Dt  
    

    TO_DATE('20140704','YYYYMMDD') as Dt
    

    【讨论】:

    • 这取决于 NLS 设置。 TO_DATE 会起作用,因为它会覆盖 locale-NLS 设置。
    猜你喜欢
    • 2015-03-11
    • 1970-01-01
    • 1970-01-01
    • 2012-09-09
    • 2014-07-20
    • 1970-01-01
    • 1970-01-01
    • 2013-12-28
    • 1970-01-01
    相关资源
    最近更新 更多