One way is to start from a generated sequence:
SELECT DATE_ADD('2010-05-11', INTERVAL SEQ.NR-1 DAY) 'Fecha'
FROM (SELECT @row := @row + 1 as NR
FROM (SELECT @row:=0) T
CROSS JOIN (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) T1
CROSS JOIN (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) T2
CROSS JOIN (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) T3
CROSS JOIN (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) T4
) SEQ
WHERE SEQ.NR - 1 <= DATEDIFF('2018-06-10', '2010-05-11')
;
The exit:
| Fecha |
|------------|
| 2010-05-11 |
| 2010-05-12 |
| 2010-05-13 |
| 2010-05-14 |
...
| 2018-06-08 |
| 2018-06-09 |
| 2018-06-10 |
With the different CROSS JOIN
of a query that returns 10 numbers, in this case we generate a sequence of 10 x 10 x 10 x 10 = 10,000 numbers. Then it is simple arithmetic of dates with DATE_ADD()
to generate each date.
The only problem with this solution is that you have to initially prefix the limit of the sequence.