MySQL - 如何显示给定范围日期的所有日期

时间:2014-07-10 08:32:22

标签: mysql sql date range

我有这样的记录:

id | name | date
1  | aji  | 2014-06-01
2  | akon | 2014-06-02
3  | dewi | 2014-06-04
4  | dani | 2014-06-05

我想显示2014-06-01 - 2014-06-06的所有日期,即使他们没有关联的记录:

id   | name | date
1    | aji  | 2014-06-01
2    | akon | 2014-06-02
NULL | NULL | 2014-06-03
3    | dewi | 2014-06-04
4    | dani | 2014-06-05
NULL | NULL | 2014-06-06

3 个答案:

答案 0 :(得分:1)

可能你可以用这种方式。

SQL Server

Select IsNull(id, Null), IsNull(name,Null),date 
   where date Between  2014-06-01 and 2014-06-06.

如果ID已设置为int,那么请执行此操作

Select IsNull(id, 0), IsNull(name,Null),date 
   where date Between  2014-06-01 and 2014-06-06.

MY SQL

select id, name,date from tr_kehadiran 
    where date >= "2014-06-30" AND date <= "2014-07-06" AND id is Null AND name is Null

请让我知道结果。

答案 1 :(得分:1)

我不确定我理解你要求的是什么。 但是

SELECT * FROM table WHERE date BETWEEN  '2014-06-01' AND '2014-06-06'

<?php
$start = new DateTime('2014-06-01');
$interval = new DateInterval('P1D');
$end = new DateTime('2014-06-06');

$period = new DatePeriod($start, $interval, $end);

foreach ($period as $date)
{
    if (isset($results['date'][$date]))
    {
        // Results display
    }
    else
    {
        // NULL display
    }
}

其中$ results是您的查询结果

答案 2 :(得分:0)

以下是要遵循的步骤 -

如果是SQL Server

  1. 使用CTE,根据您的要求填写所需的日期范围

  2. 左键将您的表格与日期列上的CTE联系起来,并在CTE中填充结果集中缺少的日期

  3. 如果是MySQL -

    1. 根据要求

    2. 创建一个临时表来填充日期范围
    3. 左边连接日期列上的临时表,并从CTE填充结果集中缺少的日期