首页 > 解决方案 > 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);  
    }

标签: sqlspring-bootdatejpaspring-data-jpa

解决方案


当我们使用时,我们期望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


推荐阅读