2014-02-19 4 views
0

Я новичок до JasperReports (Я использую iReport 5.5.0). Я пытаюсь записать условный запрос в отчет.Параметр типа даты в условном запросе

Я создал следующие параметры:

$P{queryControl} <String> 
${date} <Date> 
${deptName} <String> 

Параметр под названием $ P {queryControl}, запрос выключен, как я устанавливаю значение во время выполнения проверки значения $ P {секс} , Кроме того, функция $ {date}, $ {deptName} включает приглашение.

Установленное значение по умолчанию параметра как:

$P{sex}.equals("F") 
    ? "Select * from employees e, department d where e.staff_no = d.staff_no and  department_name = '"+${deptName}+"' and join_date >= ${date}" 
    : "Select * from employees e, department d where e.staff_no = d.staff_no and department_name = '"+${deptName}+"' and join_date <= ${date}" 

Однако, я обнаружил, что это не работает, когда я запускаю отчет. И получил следующее сообщение об ошибке:

Caused by: java.sql.SQLException: ORA-01858: a non-numeric character found where a digit was expected.  

Когда я не использую $ {дата} в где-п, отчет может быть открыт.

Любое решение?

+0

Что такое '$ {date}' и '$ {deptName}'? –

+0

Для вышеуказанного оператора SQL я буду вводить $ {date} = '02/02/2013 'и $ {deptName} =' Accounting '. –

ответ

0

Вам необходимо преобразовать var $ {date} (в соответствии с его содержанием) в реальную дату оракула. Это может быть сделано с:

$P{sex}.equals("F") 
? "Select * from employees e, department d where e.staff_no = d.staff_no and  department_name = '"+${deptName}+"' and join_date >= to_date('${date}','[FORMAT]')" 
: "Select * from employees e, department d where e.staff_no = d.staff_no and department_name = '"+${deptName}+"' and join_date <= to_date('${date}','[FORMAT]')" 

вместо «[ФОРМАТ]» вставить правильный формат-String там. Например: Если $ {date} состоит из iso-date, например 2014-02-19, правильная Format-String - «YYYY-MM-DD». A Liste всех форматов можно найти здесь: http://www.techonthenet.com/oracle/functions/to_date.php (Прокрутить вниз)

+0

Привет @ int2000, спасибо за ваш ответ. Я использовал to_date ('$ {date}', 'DD/MM/YYYY') для преобразования var $ {var}, однако ошибка все еще отображается. База данных использует формат «DD/MM/YYYY HH24: MI: SS». –

+0

В базе данных не используется «Формат даты». Он хранит только внутренний DB-Format. Вы должны сообщить БД, что такое ваш формат (f.ex. с to_date). Дамп $ {var}. Я не знаю, что в нем, и что делает с ним другая Программная логика между «вводом» и обработкой в ​​SQL – int2000

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