缺少两个日期范围之间的日期

时间:2019-02-06 19:49:21

标签: mysql sql

我想获得在给定日期范围之间的失踪日期 例如

2019-02-012019-01-28之间的日期

我在这些范围内只有5天。但我想获取所有日期都为空值(如果不存在) 像这样

1,"abc","2019-02-01",
2,"test","2019-2-06",

如果不存在,则显示如下

    3,"null","2019,02-02"  4,"null","2019,02-03" 5,"null","2019,02-03",....
,
,

1 个答案:

答案 0 :(得分:0)

为了返回结果集中的那些“缺失”日期值,我们需要一个提供它们的行源。也就是说,这些价值必须来自某个地方。行不只是自发地出现在查询中。

一种解决方案是添加一个包含日期值集的“日历”表。

CREATE TABLE `cal` ( `dt` date NOT NULL, PRIMARY KEY (`dt`)) ;

INSERT INTO `cal` (`dt`) VALUES ('2019-02-01'), ('2019-02-02'), ('2019-02-03')
                              , ('2019-02-04'), ('2019-02-05'), ('2019-02-06')
                              , ...

然后,我们可以在查询中引用该表。我们可以使用外部联接来获取匹配的行。在没有匹配行的地方,我们仍然从日历表中获取日期

 SELECT c.dt      AS dt
      , t.mycol   AS mycol 
   FROM cal c
   LEFT
   JOIN mytable t
     ON t.dt = c.dt 
  WHERE c.dt >= '2019-02-01'
    AND c.dt <  '2019-02-07'
  ORDER
     BY c.dt

我们不一定需要创建日历表。另一种可能性是在查询内联视图中生成日期集。

但是原理是一样的。我们需要一个行源,当我们在查询的FROM条款中引用日期时,该行源将返回日期值。