cx_ Oracle .DatabaseError: ORA-01843: недопустимый месяц - PullRequest
0 голосов
/ 01 апреля 2020
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 разработчике, тогда его показ

NLS_DATE_FORMAT  =  DD-MM-RR

1 Ответ

0 голосов
/ 01 апреля 2020

Когда вы применяете TO_DATE к LASTMODIFIEDDATE столбцу, и он терпит неудачу, кажется, что не все значения имеют действительный месяц в этом столбце, что означает, что его тип данных не date, а varchar2.

SQL Разработчик возвращает не все строки, а первые 50 (или около того). Если ваш запрос сканирует всю таблицу или строки, которые изначально не отображались, то он потерпит неудачу. Попробуйте перейти к последней строке в возвращенном наборе записей в SQL Developer, чтобы увидеть, что происходит.

С другой стороны, если тип данных столбца равен date, то не to_date it; в этом нет никакого смысла.

Кроме того, вы не должны полагаться на настройки базы данных. Возьмите под контроль свои данные и не указывайте string , когда означает date . Использовать литерал даты, например

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