查询返回由开始日期和结束日期列指示的范围之间的各个日期?

时间:2014-02-25 06:07:10

标签: mysql database mysql-workbench

鉴于您有两列日期,具有2014年1月1日和2014年1月7日的某一行的值,您如何进行返回该范围中包含的日期表的查询?

(例如)

January 1, 2014
January 2, 2014
January 3, 2014
January 4, 2014
January 5, 2014
January 6, 2014
January 7, 2014

假设范围刚刚从查询生成,并且日历日​​期表不可用。

2 个答案:

答案 0 :(得分:1)

select distinct(myDate) from table1 
where myDate between '2014-01-01' and  '2014-01-07';

或者如果您的值保存为时间戳(日期和时间),请使用:

select distinct(date(myDate)) from table1 
where myDate between '2014-01-01 00:00:00' and  '2014-01-07 23:59:59';

好的,如果您只想要从2014年1月1日开始的所有可能日期的列表,那么我们可以使用:

SELECT DATE(DATE_ADD('2014-01-01', 
INTERVAL @i:=@i+1 DAY) ) AS datesSeries
FROM one_of_your_tables,(SELECT @i:=0) r
limit 7
;

您也可以将其加入到您需要的其他表格中。

答案 1 :(得分:-1)

使用以下查询:只需使用您的表更改mytable,使用日期列更改a.date1,a.date2。

SELECT selected_date FROM (SELECT ADDDATE(a.date1,t4*10000 + t3*1000 + t2*100 + t1*10 + t0) selected_date,a.date1,a.date2 FROM mytable a,(SELECT 0 t0 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) t0, (SELECT 0 t1 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) t1, (SELECT 0 t2 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) t2, (SELECT 0 t3 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) t3, (SELECT 0 t4 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) t4) a WHERE selected_date BETWEEN a.date1 AND a.date2