Mysql 从日期范围列表生成每个日期

标签 mysql date

我有一个查询(select * from bla.. bla..)产生这样的日期范围结果:

code | date1 | date2

a | 2016-04-19  | 2016-04-21 |

b | 2016-04-13  | 2016-04-14 |

我想像这样生成 date1 和 date2 之间的日期范围内的每一天:

代码 |日期_结果

a | 2016-04-19

a | 2016-04-20

a | 2016-04-21

b | 2016-04-13

b | 2016-04-14

我找到了生成两个日期范围之间的每个日期的查询示例,如下所示:

SELECT ADDDATE('2016-04-10', INTERVAL @i:=@i+1 DAY) AS DAY
FROM (
SELECT a.a
FROM (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS a
CROSS JOIN (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS b
CROSS JOIN (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS c
) a
JOIN (SELECT @i := -1) r1
WHERE 
@i < DATEDIFF('2016-04-19', '2016-04-10')

但我无法用我的查询实现它:(

最佳答案

您可以使用 from_days() 将日期转换为天数 然后用理货表做内部连接(从1开始的序号) 编号 730485 是 '2000-01-01' 偏移量 ( select from_days('2000-01-01') )

select a.* , from_days(t.tallyid+730485) from 
(
    select 'a' code , '2016-04-19' date1,  '2016-04-21' date2
    union all
    select 'b'code , '2016-04-13' date1,  '2016-04-14' date2
) a
inner join Tally t on t.tallyid between (TO_DAYS(a.date1)-730485) and (TO_DAYS(a.date2)-730485)

关于Mysql 从日期范围列表生成每个日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36623782/

相关文章:

java - 与 Hibernate 额外列查询的多对多关系

java - Mysql通过Java可调用语句插入转义字符\也在数据库中

Java 公历输出错误的日期

mysql - 在mysql中查找开始日期和结束日期之间的日期

mysql - MySQL 5 中的查询语法错误过程?

MySQL TIME 类型的小时数>23

mysql - 根据日期计算/分组行,包括缺失

javascript - 日期和时间脚本

java - 在 getter 和 setter 方法中将 LocalDate 解析为 String

date - 如何将毫秒转换为人类可读的形式?