繁体   English   中英

cx_Oracle.DatabaseError: ORA-01843: 无效月份

[英]cx_Oracle.DatabaseError: ORA-01843: not a valid month

select distinct sko.CONTENTId, 
       sko.HELPDESKID, 
       sko.SEGMENTID, 
       som.SUBMITTED_FOR_NAME, 
       sko.SUBMITTEDDATE, 
       to_date(sko.LASTMODIFIEDDATE, 'DD-MM-RR') 
 from sky_know_obj sko
 join sky_object_mass som 
   on sko.CONTENTId = som.CONTENTId 
where sko.LASTMODIFIEDDATE >  date'2019-11-03' 
  and sko.LASTMODIFIEDDATE <= date'2019-12-03'

这是我的 oracle sql 查询。 我在 python 中运行它。 当我在 Oracle SQL Developer 中运行它时,它给出了结果,但是每当我尝试在 pycharm 中执行它时,就会发生以下错误:

cx_Oracle.DatabaseError: ORA-01843: 无效月份

当我跑

select * from nls_session_parameters; 

这在oracle sql developer中然后它的显示

NLS_DATE_FORMAT  =  DD-MM-RR

当您将TO_DATE应用于LASTMODIFIEDDATE列并且它失败时,似乎并非所有值在该列中都有有效月份,这意味着它的数据类型不是date而是varchar2

SQL Developer 不会返回所有行,而是返回前 50(左右)行。 如果您的查询扫描整个表或最初未显示的行,则它会失败。 尝试导航到 SQL Developer 中返回的记录集中的最后一行,看看会发生什么。

另一方面,如果列的数据类型是date ,那么不要to_date它; 这样做没有意义。

此外,您不应该依赖数据库的设置。 控制您的数据,并且在表示date时不要指定string 使用日期文字,例如

where lastmodifieddate > date '2019-11-03' -- instead of '03-11-19'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM