MySQL 是日期范围之间的日期

标签 mysql sql

我有一个包含房间开始和结束日期的表格。我写了这个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'

sql result

房间在这些日期之间处于事件状态。但是,当我这样过滤时,

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 日处于事件状态,但我无法获取它。我怎样才能做到这一点?

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

最佳答案

如果您希望行在给定日期处于事件状态,请使用以下逻辑:

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

关于MySQL 是日期范围之间的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66748239/

相关文章:

sql - Mysql高级语句

sql - 使用通配符选择 PostgreSQL 中的多列

php - 如何按分类术语从自定义 WordPress MySQL 查询中排除结果

javascript - 如何在 Node.js 上安装 socket.io 和 mysql

MySQL数据汇总技巧——有没有UNGROUP BY?

mysql - 围绕将 2 种不同类型的 ID 与一条信息相关联的 SQL 模式设计问题

c# - 使 C# 程序可以从 LAN 网络 Access MS-Access 数据库文件

php - 使用 PDO 语句更新 mysql 时遇到问题

php - 如何在 jQuery 自动完成中显示多个字段,并且在选择结果时只有一个字段在文本框中可见?

sql - 如何在SQL Server CE中插入超过4000个字符的nvarchar数据类型?