首页 > 解决方案 > 如何在日期类型的两列之间获取数据

问题描述

我有一个用于存储事件数据的表,其中包含以下两个条目

id | title  | startdate  | enddate
1  | event1 | 2019-04-01 | 2019-04-04
2  | event2 | 2019-04-04 | 2019-04-05 

我需要编写一个查询来获取数据

id| title  | date    
1 | event1 | 2019-04-01
1 | event1 | 2019-04-02
1 | event1 | 2019-04-03
1 | event1 | 2019-04-04
1 | event2 | 2019-04-04
1 | event2 | 2019-04-05

请提出任何查询。

请用mysql查询。

标签: mysql

解决方案


可以通过创建一个日期约为 273 年的表来解决您的问题。下面的查询创建表:

CREATE TABLE test2 AS 
(select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9);

CREATE TABLE calendar AS 
select adddate('1900-01-01',t4.i*10000 + t3.i*1000 + t2.i*100 + t1.i*10 + t0.i) sdate 
from test2 t0,test2 t1,test2 t2,test2 t3,test2 t4;

您可以更改和增加的日历表范围:

MIN(sdate)    MAX(sdate)
1900-01-01    2173-10-15

使用上表,您可以生成所需范围之间的日期。下面的查询给出了您的解决方案:

SELECT id,title,c.sdate as "date" 
FROM test t 
INNER JOIN calendar c 
ON c.sdate BETWEEN t.startdate AND t.enddate;

输出:

id  title   date
1   event1  2019-04-01
1   event1  2019-04-02
1   event1  2019-04-03
1   event1  2019-04-04
2   event2  2019-04-04
2   event2  2019-04-05

对于演示,请点击以下链接:

https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=6ebd669acae67d23cb5b6b9d04c86a10


推荐阅读