mysql - 如何返回日期范围落在日期范围内的 SQL 行

标签 mysql sql

当 start_date 和 end_date 期间完全或部分落在日期范围内时,我尝试返回 MySQL 行。

这是我目前正在使用的 SQL。

SELECT
        start_date,
        end_date,
        id
    FROM
        employee_leave
    WHERE
        DATE(start_date) >= :start_date_range
    AND DATE(end_date) <= :end_date_range;

这可以很好地返回完全位于指定范围内的行,但它也需要返回部分位于该范围内的行。

例如, 开始日期范围 = 2015-07-04 end_date_range = 2015-07-15

如果我有以下行,它们应该全部返回:

  1. 开始日期 = 2015-07-05,结束日期 = 2015-07-10
  2. 开始日期 = 2015-07-01,结束日期 = 2015-07-10
  3. 开始日期 = 2015-07-01,结束日期 = 2015-07-20
  4. 开始日期 = 2015-07-11,结束日期 = 2015-07-20

最佳答案

SELECT
    start_date,
    end_date,
    id
FROM
    employee_leave
WHERE
    (DATE(start_date) >= :start_date_range AND DATE(start_date) <= :end_date_range) 
OR 
    (DATE(end_date) >= :start_date_range AND DATE(end_date) <= :end_date_range);

关于mysql - 如何返回日期范围落在日期范围内的 SQL 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31647506/

相关文章:

sql - 如何将复杂的 SQL 转换为 HQL 或 JPQL 查询

python - cx_Oracle 查询返回零行

mysql - 是否可以在 MySQL 中定义一个未指定返回类型的存储函数?

mysql - 正向工程 EER 图返回 ERROR 1103

在 TeSTLink 安装中找不到 MySql

mysql - 替换 MySQL 中的 sys_extract_utc

mysql - 根据另一个表自动将数据插入到表中

php - mysql根据数据在哪个表中从表中选择

php - Laravel DB mysql 选择数组中列的位置?

php - SQL 查询中的 foreach 循环