在mysql中,我使用此sql,它运行良好。
select * from student where CREATE_TIME>=DATE_SUB(curdate(),INTERVAL 24 HOUR)
现在我想使用日期作为参数,所以我使用NamedParameterJdbcTemplate
,如果我通过'2020-05-30'这样的日期,它也可以很好地运行。但是当我通过'CURRENT_DATE'或'curdate()',无法搜索任何结果。如何更改我的代码?
NamedParameterJdbcTemplate nameJdbc = new NamedParameterJdbcTemplate(jdbcTemplate);
Map<String,Object> paramMap = new HashMap<String, Object>();
//dateStr when '2020-05-30' is ok,'CURRENT_DATE' is not ok;
paramMap.put("dateStr",dateStr);
String sql = "SELECT *"
+ " FROM student where CREATE_TIME>=DATE_SUB(:dateStr,INTERVAL 24 HOUR)" ;
return nameJdbc.query(sql,paramMap,
new BeanPropertyRowMapper<>(Student.class));
答案 0 :(得分:1)
这是行不通的,因为CURRENT_DATE
或等效的函数调用是作为字符串参数而不是关键字插入的。
您可以做的一件事是,如果参数为空,则用:dateStr
手动替换SQL字符串中的CURRENT_DATE
,否则将其值放在参数映射中。
如果参数为空,则更好的选择是仅使用LocalDate.now().toString()
设置日期字符串,并始终在SQL语句中进行设置。