У меня есть приложение весенней загрузки, в котором в одном из классов DAO у нас есть один метод, где мы извлекаем некоторые данные, для этого мы используем запрос ниже, здесь используется namedParameterJdbcTemplate
select student_id from student_records where create_date >= timestamp '"+appProps.getFromDate()+"' and create_date <= timestamp '"+appProps.getToDate()+"' and student_id in (:studentIdList)
полный метод, как показано ниже
public List<String> readMatchingStudentIds_ALL(List<String> inputStudentIdsList){
List<String> macthingStudentIdsList = new ArrayList<>();
try{
Map<String, List<String>> namedParameters = Collections.singletonMap("studentIdsList", inputStudentIdsList);
String query = " select student_id from student_records where create_date >= timestamp '"+appProps.getFromDate()+"' and create_date <= timestamp '"+appProps.getToDate()+"' and student_id in (:studentIdList)";
macthingStudentIdsList = namedParameterJdbcTemplate.queryForList(query, namedParameters, String.class);
}catch(Exception e)
{
throw new RuntimeException(e.getMessage(),e);
}
return macthingStudentIdsList;
}
все работает нормально, но теперь возникают проблемы, например, входящий студент в списке содержит «AFE1245», но в нашей базе данных у нас есть данные, подобные ниже «000AEF1245», чтоя имею в виду 0 с префиксом, мы не знаем, сколько префиксов 0, для одного запроса мы можем использовать оператор LIKE, как показано ниже
select student_id from student_records where student_id like '%input_student_id'
, но мой случай другой, так как нам нужно использовать выражение sql IN
, есть ли у них возможность, мы можем использовать sql IN
предложение и LIKE
оба или их любой другой способ