Select 来自 MySQL 中的一系列日期

Select from a range of dates in MySQL

是否可以select一个日期范围,其中每个日期是一行?
我想做的是像这样的伪代码:

SELECT date from dual where date >= "2019-01-01" AND date <= "2019-01-05"

并且结果应该是具有以下值的单列:

2019-01-01
2019-01-02
2019-01-03
2019-01-04
2019-01-05

这在 MySQL 中甚至可能吗?

在 MySQL 8.0 中,您可以使用递归查询来执行此操作:

with recursive cte as (
    select '2019-01-01' dt
    union all select dt + interval 1 day from cte where dt < '2019-01-05'
)
select dt from cte order by dt

Demo on DB Fiddle:

| dt         |
| :--------- |
| 2019-01-01 |
| 2019-01-02 |
| 2019-01-03 |
| 2019-01-04 |
| 2019-01-05 |

在早期版本中,解决方案通常包含 table 个数字,其中包含从 0 开始的连续整数。

create table mynumbers (n int);
insert into mynumbers values(1), (2), (3), (4), (5);

select '2019-01-01' + interval n day dt
from mynumbers n
where '2019-01-01' + interval n day <= '2019-01-05'

Demo

注意:如果需要生成非常大的数据集,"number table"方案比递归查询更高效。

你可以试试,

SELECT date from dual 
where date >= (SELECT min(a.date) from DatesTable a) 
AND date <= (SELECT max(b.date) from DatesTable b)

    SELECT date from dual 
    where date BETWEEN  (SELECT min(a.date) from DatesTable a) 
                         AND 
                        (SELECT max(b.date) from DatesTable b)

您还可以在子查询中添加一些条件(通过使用 WHERE 子句)以反映不同的情况。