sql - 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
推荐阅读
- r - R 用于解决线性规划营销问题
- python - 使用 pip install leveldb 时出现错误
- react-native - Reactnavigation - 不要按返回按钮返回登录屏幕
- typescript - 将本地 JS 模块导入 TS 文件的最简单方法是什么?
- typescript - 如何修复打字稿中的“不能将命名空间用作类型 ts(2709)”?
- python - 使用 Tkinter 移动图像
- .net-core - Protobuf-net 缺少依赖 System.Private.ServiceModel
- php - 对 PHP REST API 的 POST 请求仅适用于 Postman
- google-sheets - 如果单元格 A > 单元格 B,则有条件地锁定 Google 表格中的单元格
- python - 使用 DateTime 格式的重复索引连接两个数据帧