Выдача столбца даты ORA-01861 в хранимой процедуре - PullRequest
0 голосов
/ 20 января 2020

У меня есть запрос ниже в oracle хранимой процедуре, которая вызывает проблему.

Select * 
from my_table 
where TO_CHAR(TO_DATE(billing_date,'DD-MON-YY',NLS_DATE_LANGUAGE=English'),'YYYY-MM-DD') ='2018-06-1';

Я получаю ORA-01861: литерал не соответствует строке формата.

My billing_date имеет дату, такую ​​как 01-июнь-18, и это столбец типа даты

Я выполняю эту хранимую процедуру, используя cx_ Oracle в Python.

Ответы [ 2 ]

2 голосов
/ 20 января 2020

Читая ваш код, кажется, что billing_date тип данных столбца varchar2. Если это так, это может помочь:

SQL> with my_table (id, billing_date) as
  2    (select 1, '20-jan-20' from dual union all
  3     select 2, '16-jun-19' from dual union all
  4     select 3, '01-jun-18' from dual
  5    )
  6  select *
  7  from my_table
  8  where billing_date = to_char(date '2018-06-01', 'dd-mon-yy', 'nls_date_language = english');

        ID BILLING_D
---------- ---------
         3 01-jun-18

SQL>

Если, с другой стороны, billing_date равно date, то становится проще:

SQL> with my_table (id, billing_date) as
  2    (select 1, date '2020-01-20' from dual union all
  3     select 2, date '2019-06-16' from dual union all
  4     select 3, date '2018-06-01' from dual
  5    )
  6  select *
  7  from my_table
  8  where billing_date = date '2018-06-01';

        ID BILLING_
---------- --------
         3 01.06.18

SQL>
2 голосов
/ 20 января 2020

Просто используйте даты следующим образом:

Select * from my_table where billing_date = date'2018-06-01';

Учитывая, что ваш billing_date относится к столбцу типа даты.

Cheers !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...