提问者:小点点

用MYSQL获取两个不同日期之间的数据


表:(员工)

我需要获取两天之间的数据我使用以下查询获取两个日期之间的数据

SELECT * FROM employee WHERE Price ((DATE('2020-01-01') BETWEEN DATE(start_date) AND DATE(end_date)) OR (DATE('2020-01-03') BETWEEN DATE(start_date) AND DATE(end_date)) OR (DATE(start_date) >= DATE('2020-07-03')) AND DATE(end_date) <= DATE('2020-07-03'));

我得到了如下结果:

但我希望得到以下结果

那么,我如何在mysql中获得我期望的结果数据呢


共2个答案

匿名用户

您的查询似乎与您的示例数据无关。

基于您的数据,您似乎需要生成日期。 您可以使用递归CTE,然后使用join:

with recursive dates as (
      select date('2020-01-01') as dte
      union all
      select dte + interval 1 day
      from dates
      where dte < date('2020-01-04')
     )
select d.dte, e.end_date, e.employeename
from employee e join
     dates d
     on d.dte between e.start_date and e.end_date

这是一个db<;>小提琴。

匿名用户

您在where子句中有问题:

SELECT * FROM employee WHERE (start_date <= '2020-01-01 00:00:00' AND end_date >= '2020-01-01 23:59:59' ) OR (start_date <= '2020-01-03 00:00:00' AND end_date >= '2020-01-03 23:59:59' ) OR (start_date <= '2020-07-03 00:00:00' AND end_date >= '2020-07-03 23:59:59' );

在Mysql中不需要更改字符串日期的类型,但在Oracle中是这样的。