如何解决Springboot findByDate Mysql
我遇到一个问题,无法找到在2个日期内创建的数据库的结果。 当前,如果我正在寻找2020-11-01和2020-11-02之间的结果,则查询仅返回2020-11-01的结果,而不返回2020-11-02的结果。
就像我在两个相同的日期之间进行搜索一样,没有任何结果...
我希望通过在01和02之间进行搜索,它会向我返回这两个日期之间已经实现的结果,因此结果分别为2020-11-01和2020-11-02。
我也希望这个请求能够在两个相同的日期工作。
我希望有可能! :) 感谢您的帮助
我的存储库
List<HistoriqueDeploiement> findByNamespaceIdAndLogCreatedAtBetween(Integer id_namespace,Date date_debut,Date date_fin);
我的控制器:
@GetMapping("/historiquedeploiement/namespace/{namespace}/date/{date_debut}/{date_fin}")
public ResponseEntity<List<HistoriqueDeploiementReadingDTO>> GetHistoriqueDeploiementfindByNamespaceIdMapping(@PathVariable String namespace,@PathVariable("date_debut") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) Date date_debut,@PathVariable("date_fin") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) Date date_fin) throws InternalServerErrorException {
Integer idnamespace = namespaceRepository.findByNamespace(namespace).getId();
return new ResponseEntity<>(mappingHistoriquetoDTO.findByNamespaceIdAndLogCreatedAtBetweenMapping(idnamespace,date_debut,date_fin),HttpStatus.OK);
}
解决方法
使用between
时,我们希望获取从2020-11-01创建的记录,直到2020-11-02结束。不幸的是事实并非如此。真正发生的是:
created_at between '2020-11-01 00:00:00+00000' and '2020-11-02 00:00:00+00000'
要检索2020-11-01和2020-11-02之间的记录,您必须在结束日期前加上1天。这样,您的查询将等同于:
created_at between '2020-11-01 00:00:00+00000' and '2020-11-03 00:00:00+00000'
我知道这与Spring JPA有关,但这也是一本好书:https://sqlblog.org/2009/10/16/bad-habits-to-kick-mis-handling-date-range-queries
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。