这是我的查询
SELECT *
FROM (SELECT TO_DATE(INV_DATE, 'YYYYMMDD') INVOICE_DATE
FROM SAPSCH.SAP_TABLE T
WHERE T.INV_DATE <> '00000000')
WHERE INVOICE_DATE = '14-Sep-2012';
SAPSCH.SAP_TABLE
是一个使用dblink连接到SAP模式的视图。列INV_DATE
的格式为'YYYYMMDD'。例如,“20120914”代表“14-Sep-2012”。内部查询返回15 k+条记录。但是当我运行完整的查询时,它给了我这个错误:
ORA-01843:不是有效月份
2条答案
按热度按时间wvt8vs2t1#
查询中有两个地方可能会导致错误:
WHERE INVOICE_DATE = '14-Sep-2012'
仅适用于数据库设置,其中“Sep”是一个月的有效缩写(例如英语)。否则你会得到描述的错误。1.您的SAP数据库可能包含不正确的数据,例如“20151301”,这也会触发此错误。
在你的简单查询中,你当然可以简单地写如下:- )
但是,如果您想处理所有日期,而不仅仅是2012年9月14日,那么您必须检查日期是否有效。不幸的是,Oracle没有我所知道的这种检查功能。因此,你不能单独使用SQL来解决这个问题,而是需要PL/SQL:
然后:
x759pob22#
始终建议使用to_date显式转换为14-Sep-2012