我有一个spring boot应用程序,在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
的可能性,还是它们的其他方式>
答案 0 :(得分:0)
您可以通过具有OR的单个LIKE来实现:
SELECT student_id FROM student_records
WHERE student_id LIKE '%input_student_id'
OR student_id LIKE 'input_student_id%'
OR student_id LIKE '%input_student_id%';
引用this
答案 1 :(得分:0)
假设student_id
包含前导零,而您的参数不包含前导零,则可以简单地trim
将它们:
AND TRIM(LEADING '0' FROM student_id) IN (:studentIdList)
话虽如此,如果student_id
总是用0填充到固定长度,那么您在代码中对:studentIdList
进行相同操作并按原样匹配它们。