我试着按日期范围过滤假期,但我不知道怎么做。请帮帮忙。
数据库: postgresql后端: nestjs + prisma orm (4.0.0)前端: React
有关假期的数据以下列形式存储在数据库中:
id: Int
userId: Int
dateStart: DateTime
dateEnd: DateTime在前端过滤器中,我有这样的字段:
{
dateStart: Date;
dateEnd: Date;
}我不明白如何向数据库提出请求,以便输出两个范围的接触结果。
以下请求工作不正确:
where: {
dateStart: { gte: dto.dateStart },
dateEnd: { lte: dto.dateEnd }
}例如,如果我是1月25日至2月2日休假的用户,并且在筛选器中指定从1月1日到1月31日的排序,那么假期将不会出现。在本例中,由于不符合dateEnd条件,它将无法工作。
我唯一能猜到的就是将输入的dateStart和dateEnd转换成日期数组,然后在where查询中遍历循环。它起作用了,但速度很慢。例如,如果你过滤了整整一年,那么对数据库的请求就太大了,请告诉我。
发布于 2022-10-17 12:24:25
使用OR算子解决了这一问题。
示例:
OR: [
{ dateStart: { lte: dto?.dateEnd }, dateEnd: { gte: dto?.dateStart } },
{ dateStart: { gte: dto?.dateStart }, dateEnd: { lte: dto?.dateEnd } },
],这是我的工作。谢谢大家!
发布于 2022-10-17 12:05:02
首先,我会用简单的文字写下你想要寻找的东西。
据我所知(但请纠正我),您希望找到在指定日期范围内的所有假期(部分)。
(这当然有助于区分假期的dateStart/dateEnd和过滤器的filterStart/filterEnd。)
然后,将其转化为一个算法,例如,通过分析与这些日期有关的不同情况。算法应该是:
dateStart在(或等于) filterEnd之前,ANDdateEnd在(或相等) filterStart之后
作为最后一步(我将把这一点留给您),您必须将此算法转换为prisma查询。
https://stackoverflow.com/questions/74096682
复制相似问题