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
| 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'
注意:如果需要生成非常大的数据集,"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 子句)以反映不同的情况。
是否可以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
| 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'
注意:如果需要生成非常大的数据集,"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 子句)以反映不同的情况。