cx_Oracle.DatabaseError: ORA-01843: 不是一个有效的月份
Posted
技术标签:
【中文标题】cx_Oracle.DatabaseError: ORA-01843: 不是一个有效的月份【英文标题】:cx_Oracle.DatabaseError: ORA-01843: not a valid month 【发布时间】:2020-04-01 07:48:00 【问题描述】: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: not a valid month
当我跑步时
select * from nls_session_parameters;
这在 oracle sql developer 中然后显示
NLS_DATE_FORMAT = DD-MM-RR
【问题讨论】:
【参考方案1】:当您将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'
【讨论】:
谢谢...现在可以使用了。不知道为什么我使用 to_date 作为 DATE 类型。我使用了 sko.LASTMODIFIEDDATE BETWEEN DATE '2020-01-01' AND DATE '2020-01-08' 这个..它现在可以工作了跨度>以上是关于cx_Oracle.DatabaseError: ORA-01843: 不是一个有效的月份的主要内容,如果未能解决你的问题,请参考以下文章
python 3.6 cx_Oracle.DatabaseError: DPI-1050
(cx_Oracle.DatabaseError) DPI-1047: Cannot locate a 64-bit Oracle Client library:
python用cx_Oracle连接数据库,出现错误cx_Oracle.DatabaseError: DPI-1047: Cannot locate a 64-bit Oracle Client li
cx_Oracle.DatabaseError: ORA-28759: failure to open file
Linux下使用Python连接Oracle 报cx_Oracle.DatabaseError: DPI-1047: 64-bit Oracle Client library cannot be lo
已经配好64位的oracle instantclient,依旧Python报错cx_Oracle.DatabaseError: DPI-1047: Cannot locate a 64-bit Ora