【问题标题】:ORA-01861: literal does not match format string,ORA-01861: 文字与格式字符串不匹配,
【发布时间】:2015-01-11 11:53:46
【问题描述】:

目前我正在尝试将日期字段与以下语句进行比较

AND (AIA.INVOICE_DATE >= NVL(TO_DATE(:P_INV_DT_FROM,'DD-MON-YYYY'), '01-JAN-1900')  
OR AIA.INVOICE_DATE IS NULL)
AND (AIA.INVOICE_DATE <= NVL(TO_DATE(:P_INV_DT_TO,'DD-MON-YYYY'), '31-DEC-4712')  
OR AIA.INVOICE_DATE IS NULL)

但是,我收到以下错误,

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

*原因:输入中的文字必须与输入中的文字长度相同 格式字符串(前导空格除外)。如果 “FX”修饰符已打开,文字必须完全匹配, 没有多余的空格。

*操作:更正格式字符串以匹配文字。

P.S: AIA.INVOICE_DATE 的形式是 'DD-MON-YYYY' 和 p_inv_dt_from 和 p_inv_dt_to 的形式是 'YYYY/MM/DD HH24:MM:SS'

【问题讨论】:

  • 这些不是日期值:'01-JAN-1900', '31-DEC-4712'
  • 另外,如果AIA.INVOICE_DATE 有任何“格式”,它必须是字符串,而不是日期列。

标签: sql string oracle date ora-01861


【解决方案1】:

您需要明确识别 '01-JAN-1900' 和 '31-DEC-4712' 的格式(即用 TO_DATE('01-JAN-1900','DD-MON-YYYY') )。否则,Oracle 将尝试根据运行代码的人的环境会话设置将字符串转换为日期。例如,您的会话可能有 NLS_DATE_FORMAT='MM/DD/YYYY',它与 '01-JAN-1900' 不兼容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-24
    • 2010-11-26
    • 2012-10-09
    • 2014-04-27
    • 2014-11-30
    相关资源
    最近更新 更多