提问者:小点点

MySQL是介于日期范围之间的日期


我有一张表,上面有房间的开始和结束日期。我写了这个SQL:

SELECT ic.invoice_id,
       pccr.room_name,
       DATEDIFF(end, start) AS 'Total Days',
       pccr.start,
       pccr.end,
FROM partners_campuses_courses_rooms AS pccr
         JOIN invoices_courses AS ic ON pccr.course_id = ic.course_id
         JOIN invoices i on ic.invoice_id = i.invoice_id
WHERE pccr.deleted_at IS NULL
    AND pccr.end BETWEEN '2022-12-01' AND '2022-12-31'

这些房间在这段时间内是有效的。但是,当我这样过滤的时候,

SELECT ic.invoice_id,
       pccr.room_name,
       DATEDIFF(end, start) AS 'Total Days',
       pccr.start,
       pccr.end,
FROM partners_campuses_courses_rooms AS pccr
         JOIN invoices_courses AS ic ON pccr.course_id = ic.course_id
         JOIN invoices i on ic.invoice_id = i.invoice_id
WHERE pccr.deleted_at IS NULL
    AND pccr.end BETWEEN '2022-12-01' AND '2022-12-30'

我没有结果。这些日期就像一个数组:

dates = ['2017-01-01', '2017-01-02', '2017-01-03', ... , '2022-12-30', '2022-12-31']

所以,你可以看到那个房间在2022-12-30是活动的,但我不能得到它。我怎么能那样做?

希望我能很好地表达自己。


共2个答案

匿名用户

如果需要在给定日期处于活动状态的行,请使用以下逻辑:

WHERE pccr.deleted_at IS NULL AND
      pccr.end >= $date AND
      pccr.start <= $date

如果您有一个日期范围,请使用:

WHERE pccr.deleted_at IS NULL AND
      pccr.end >= $start_date AND
      pccr.start <= $end_date

匿名用户

需要选择开始日期在期间结束之前、开始日期在期间开始之后的房间

SELECT ic.invoice_id,
       pccr.room_name,
       DATEDIFF(end, start) AS 'Total Days',
       pccr.start,
       pccr.end,
FROM partners_campuses_courses_rooms AS pccr
         JOIN invoices_courses AS ic ON pccr.course_id = ic.course_id
         JOIN invoices i on ic.invoice_id = i.invoice_id
WHERE pccr.deleted_at IS NULL
    AND pccr.start < '2022-12-30' AND pccr.end > '2022-12-01'