2015-02-23 5 views
0

У меня есть отчет кристалл, который проходит дату в запросе SQL {Date}?Crystal Reports - Oracle 01861 Ошибка

Это работает, когда кристалл подключен с помощью соединения ODBC, однако при изменении его в «Oracle Server» подключение Я получаю сообщение об ошибке:

ORA-01861: literal does not match format string 

Я попытался удалить to_char или TO_DATE (как на исследования это, кажется, причиной проблемы, но безрезультатно)

SELECT 
ACTIVE_SEPARATE.WO_NO, 
MCH_TYPE, 
24 * (to_date(to_char(REAL_F_DATE,'DD-MM-YYYY HH24:MI:SS'), 'DD-MM-YYYY HH24:MI:SS') - to_date(to_char(REQUIRED_START_DATE,'DD-MM-YYYY HH24:MI:SS'), 'DD-MM-YYYY HH24:MI:SS')) as BREAKDOWN_HOURS, 
(100 - (((24 * (to_date(to_char(last_day(to_date({?Month}, 'dd-mm-yyyy')),'DD-MM-YYYY'), 'DD-MM-YYYY') - to_date(to_char(trunc(to_date({?Month}, 'dd-mm-yyyy'), 'month'),'DD-MM-YYYY'), 'DD-MM-YYYY'))) + 24) - (24 * (to_date(to_char(REAL_F_DATE,'DD-MM-YYYY HH24:MI:SS'), 'DD-MM-YYYY HH24:MI:SS') - to_date(to_char(REQUIRED_START_DATE,'DD-MM-YYYY HH24:MI:SS'), 'DD-MM-YYYY HH24:MI:SS'))))/((24 * (to_date(to_char(last_day(to_date({?Month}, 'dd-mm-yyyy')),'DD-MM-YYYY'), 'DD-MM-YYYY') - to_date(to_char(trunc(to_date({?Month}, 'dd-mm-yyyy'), 'month'),'DD-MM-YYYY'), 'DD-MM-YYYY'))) + 24)) AS PERCENTAGE_AVAILABILITY 
FROM ACTIVE_SEPARATE 
RIGHT JOIN EQUIPMENT_FUNCTIONAL ON EQUIPMENT_FUNCTIONAL.MCH_CODE = (SELECT DISTINCT CASE WHEN MCH_CODE LIKE '%-%' THEN TRIM(SUBSTR(MCH_CODE, 0, INSTR(MCH_CODE, '-')-1)) ELSE MCH_CODE END FROM ACTIVE_SEPARATE ACTIVE_SEPARATE_SUB WHERE ACTIVE_SEPARATE.MCH_CODE = ACTIVE_SEPARATE_SUB.MCH_CODE) 
WHERE ERR_CLASS = '001' 
AND MCH_TYPE IS NOT NULL 
AND (ACTIVE_SEPARATE.REQUIRED_START_DATE BETWEEN 
trunc({?Month}, 'MM') 
AND 
LAST_DAY({?Month})) 

вшивый гр Это означает, что пользователь вводит дату (любую дату). Этот код займет дату. Выполните общее количество часов в выбранном месяце.

Он также разработает часы пробоя, взяв время окончания и время начала работы друг от друга.

В конце концов, это будет работать в течение нескольких часов в месяце - часы brakedown, чтобы предоставить нам доступные часы.

+0

Это будет очень сложно устранить этот уродливый код. Указывает ли номер строки на ошибку? Можете ли вы загрузить некоторые образцы данных? Нам нужно посмотреть, с чего это начинается, если нам нужно будет преобразовать дату 3 раза за 1 значение. – mmmmmpie

+0

Номер строки. Я знаю коды уродливые, схема, с которой я работаю, ужасна. Сейчас я отредактирую. – LaLa

+0

Является ли эта часть гораздо большего вида или запроса? Разбейте некоторые из этих штук и проведите их отчетливо. Например, выполните это: 'select to_char (REAL_F_DATE, 'DD-MM-YYYY HH24: MI: SS') из HISTORICAL_SEPARATE;' повторите это, пока не будете запускать целые фрагменты. – mmmmmpie

ответ

1

Вы не согласны в том, как вы относитесь к своему значению {?Month}. В списке выбора вы делаете:

to_date({?Month}, 'dd-mm-yyyy') 

Если Crytal короткая дата рассматривается как строковый тип, то это нормально (хотя с помощью слэш вместо черточек бы било), но если он рассматривается как дата type, то это делает неявное преобразование в строку, а затем явное преобразование обратно в дату, что означает, что ваши настройки NLS вступают в игру.

Но в пункте где вы просто делаете:

BETWEEN trunc({?Month}, 'MM') AND LAST_DAY({?Month})) 

Это имеет обратную ситуацию. Если короткая дата Crytal рассматривается как строковый тип, это делает неявное преобразование в дату, что означает, что ваши настройки NLS снова включаются в игру, но если они рассматриваются как тип даты, тогда все в порядке.

Они не могут быть правы, и я не знаком с Crystal Reports, поэтому я не уверен, какое преобразование происходит. Согласование их - добавление явного преобразования в предложение where или удаление его в списке выбора - покажет, в чем проблема. I думаю ORA-01861 может исходить только от to_date(), что означает, что предложение where является проблемой.

В SQL Developer ваш NLS_DATE_FORMAT предположительно является DD-MM-YYYY, поэтому неявные преобразования все еще работают, в зависимости от того, что происходит. Но в Crystal Reports у вас есть другой NLS_DATE_FORMAT, который приводит к сбою неявных преобразований.

Смежные вопросы