2014-12-16 3 views
1

В моем случае обязательны только первые 2 параметра. Когда пользователи не предоставили остальные параметры, я использую charachter '%' для оператора LIKE, чтобы все данные были показаны. Любая идея, как решить это для инструкции IN? Парам раствор IN ('%') не работает => NullSQL-выбор всех записей с инструкцией IN

Параметры:
java.sql.Timestamp, java.sql.Timestamp, java.lang.String, java.lang.String, Java .lang.String, java.lang.String

запрос:

SELECT * 
FROM RC_Recall t INNER JOIN RC_RECALLSTORE s ON t.ID = s.RECALLID 
WHERE t.creationdate >= ?1 AND t.enddate <= ?2 AND t.id LIKE ?3 
     AND t.afdeling IN (?4) AND s.storeid IN (?5) 
ORDER BY ID DESC 

ответ

1

оператор IN в SQL не может принять характер дикого карты. Вы должны добавить или на запрос, чтобы заставить его работать ...

select * 
from RC_Recall t INNER JOIN RC_RECALLSTORE s ON t.ID = s.RECALLID 
where t.creationdate >= ?1 
AND t.enddate <= ?2 
AND t.id LIKE ?3 
AND ('%' = ?4 OR t.afdeling IN (?4)) 
AND ('%' = ?5 OR s.storeid IN (?5)) 
ORDER BY ID DESC 

Если вы используете положение параметра для передачи параметров, вам, вероятно, придется изменить его

AND ('%' = ?4 OR t.afdeling IN (?5)) 
AND ('%' = ?6 OR s.storeid IN (?7)) 

Надеюсь, что поможет

+0

сравнение предикат >>? = '%' << содержит хост-переменную (маркер параметра) в левой части – Timvdb92

+0

Так должно ли это быть «%» =? 4 и «%» =? 5? – Spock

+0

Действительно, это работает! Thanks Возможно, вы сможете изменить свой ответ в правильном синтаксисе :-) – Timvdb92

0

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

+0

Динамическое построение запроса приведет к сильному анализу базы данных. Это обычно нежелательно. –

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