目前我正在尝试将日期字段与以下声明进行比较
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 - &#34;文字与格式字符串&#34;
不匹配*原因:输入中的文字必须与文字中的文字长度相同 格式字符串(前导空格除外)。如果 &#34; FX&#34;修改器已经切换,文字必须完全匹配, 没有多余的空白。
*操作:更正格式字符串以匹配文字。
P.S:AIA.INVOICE_DATE是DD-MON-YYYY&#39;的形式。和p_inv_dt_from和p_inv_dt_to的格式为&#39; YYYY / MM / DD HH24:MM:SS&#39;
答案 0 :(得分:2)
您需要明确标识&#39; 01-JAN-1900&#39;的格式。和&#39; 31-DEC-4712&#39; (即将它们包装在TO_DATE(&#39; 01-JAN-1900&#39;,&#39; DD-MON-YYYY&#39;))。否则,Oracle将尝试根据运行代码的任何人的环境会话设置将字符串转换为日期。例如,您的会话可能有NLS_DATE_FORMAT =&#39; MM / DD / YYYY&#39;,它与&01; 01-JAN-1900&#39;不兼容。